iOS OC中关于对象为nil时的方法调用

2018-05-24  本文已影响0人  gerrywanggang

很多同学在碰到nil时,有点不知道所措。其实nil作为对象调用任何方法都不会出错,没有任何效果。

以下为验证代码:

#import "ViewController.h"

#import "MyObject.h"

@interface ViewController ()

@property (strong, nonatomic) MyObject *obj;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    MyObject*obj =nil;

    self.obj= obj;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event {

    NSLog(@"test send any message to nil:%@",self.obj);

    [self.obj anyMethod];

}

//MyObject类

@interfaceMyObject :NSObject

- (void)anyMethod;

@end

#import "MyObject.h"

@implementation MyObject

@end

MyObject类的.m文件不需要对anyMethod方法做任何实现。在Viewcontroller中的.m中使用touchBegan方法对nil对象,调用anyMethod方法。

结果输出如下:

2018-05-24 11:49:38.554805+0800 detest0523[7371:104618] test send any message to nil:(null)

2018-05-24 11:49:39.187794+0800 detest0523[7371:104618] test send any message to nil:(null)

2018-05-24 11:49:40.009444+0800 detest0523[7371:104618] test send any message to nil:(null)

2018-05-24 11:49:40.625293+0800 detest0523[7371:104618] test send any message to nil:(null)

2018-05-24 11:49:41.251806+0800 detest0523[7371:104618] test send any message to nil:(null)

没有任何崩溃和效果产生,结论就是:

可以对nil对象发送任何消息,但没有任何反应。

BTW: 如果nil作为作为参数传入方法或者函数中,还是会造成崩溃的,那是因为参数不合法造成的问题。

上一篇下一篇

猜你喜欢

热点阅读