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作为作为参数传入方法或者函数中,还是会造成崩溃的,那是因为参数不合法造成的问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容