美文网首页
iOS OC中关于对象为nil时的方法调用

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

作者: gerrywanggang | 来源:发表于2018-05-24 14:16 被阅读0次

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

    相关文章

      网友评论

          本文标题:iOS OC中关于对象为nil时的方法调用

          本文链接:https://www.haomeiwen.com/subject/plhsjftx.html