iOS OC中关于对象为nil时的方法调用
很多同学在碰到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作为作为参数传入方法或者函数中,还是会造成崩溃的,那是因为参数不合法造成的问题。