OC中给nil和NSNull对象发送消息

最近面试时被多次问到这个问题,自己也了解一些,但是没有通过代码验证,所以,说的时候也没有底气,不敢打包票,今天就验证了一下。


      NSString*str =nil;
      NSIntegerlen = str.length;//输出0
      NSString*subStr = [strsubstringFromIndex:2];// 0
      NSArray*arr =nil;
      NSIntegercou= arr.count;// 0
      idobj = arr[0];// obj = (id) 0x0
      NSString*obj2 = arr[3];// obj2 = (nsstring *)nil
      NSString*obj3 = arr[0];// obj3 = (nsstring *)nil
      idobj4 = arr[4];// obj4 = (id) 0x0
      NSString*str1 = [NSNullnull];
      NSIntegerlen1 = str1.length;// crash
      NSArray*arr1 = [NSNullnull];
      NSIntegercou1= arr1.count;// crash没有验证

从上面可以看出,给nil对象发送消息,是不会崩溃的,但是要么返回默认的0,要么返回nil对象。至于id类型的为什么返回0x0,而不是返回nil,我也是有些疑问的,nil和0x0的具体区别还有待研究。
而如果给nunull对象发送消息,则会引起crash,猜测因为它没有任何方法,所以会抛出'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x10fd9a4c0'的异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容