OC中給nil和NSNull對(duì)象發(fā)送消息

最近面試時(shí)被多次問到這個(gè)問題,自己也了解一些,但是沒有通過代碼驗(yàn)證,所以,說的時(shí)候也沒有底氣,不敢打包票,今天就驗(yàn)證了一下。


      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沒有驗(yàn)證

從上面可以看出,給nil對(duì)象發(fā)送消息,是不會(huì)崩潰的,但是要么返回默認(rèn)的0,要么返回nil對(duì)象。至于id類型的為什么返回0x0,而不是返回nil,我也是有些疑問的,nil和0x0的具體區(qū)別還有待研究。
而如果給nunull對(duì)象發(fā)送消息,則會(huì)引起crash,猜測(cè)因?yàn)樗鼪]有任何方法,所以會(huì)拋出'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x10fd9a4c0'的異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容