很多同學在碰到nil時大审,有點不知道所措姊途。其實nil作為對象調(diào)用任何方法都不會出錯兄一,沒有任何效果。
以下為驗證代碼:
#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方法做任何實現(xiàn)鞋吉。在Viewcontroller中的.m中使用touchBegan方法對nil對象,調(diào)用anyMethod方法励烦。
結(jié)果輸出如下:
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)
沒有任何崩潰和效果產(chǎn)生谓着,結(jié)論就是:
可以對nil對象發(fā)送任何消息,但沒有任何反應坛掠。
BTW: 如果nil作為作為參數(shù)傳入方法或者函數(shù)中赊锚,還是會造成崩潰的,那是因為參數(shù)不合法造成的問題屉栓。