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'的异常。

你可能感兴趣的:(OC中给nil和NSNull对象发送消息)