nil NSNull NULL在oc中的區別

2021-07-05 07:35:55 字數 1565 閱讀 3629

控制處理不當是引起程式錯誤乃至崩潰的重要原因之一。

因為object-c的集合物件,如nsarray、nsdictionary、nsset等,都有可能包含nsnull物件,所以,如果一下**中的item為nsnull,則會引起程式崩潰。

nsstring *item=[nsarray objectatindex:i]; 

if([item isequaltostring:@

"testnumber"

])  

以下**是常見的錯誤,release物件沒有設定為nil,從而引起程式崩潰。 

id someobject=[[object alloc] init]; 

//...

[someobject release]; 

//...

if(someobject)  

nil用來給物件賦值(object-c的任何物件都屬於id型別),null則給任何指標賦值,null和nil不能互換,nil用於類指標賦值(在object-c中類是乙個物件,是類的meta-class的例項),而nsnull則用於集合操作,雖然它們表示的都是空值,但是使用場合完全不同,所以在編碼時嚴格按照變數型別來賦值,將正確的空值賦給正確的型別,使**易於閱讀和維護,也不易引起錯誤。

//判斷物件不空

if(

object) {} 

//判斷物件為空

if(

object== nil) {} 

//陣列初始化,空值結束

nsarray *pagenames=[[nsarray alloc] initwithobjects:@"documentlist"

,@"advancedsearch"

,@"statistics"

,nil]; 

//判斷陣列元素是否為空

uiviewcontroller *controller=[nsarray objectatindex:i]; 

if((nsnull *)controller == [nsnull 

null]) 

//判斷字典物件的元素是否為空

nsstring *userid=[nsdictionary objectforkey:@"userid"

];if(userid == [nsnull 

null])  

object-c有個可愛的特性,就是當發訊息給nil物件時,系統返回0值而不是引起異常,明白object-c的這個特性對於開發正確的ios程式非常重要,因為nil是物件的合法值,nil物件同樣可以接收訊息,例如:

person=nil; 

[person castballot]; 

nslog("person=%@"

,person); 

物件置空,然後傳送訊息,程式同樣接著往下執行而不會崩潰。

在阿里O2O倉儲解決方案公司擔任系統架構師

在阿里o2o倉儲解決方案公司擔任系統架構師 系統運維主管 一職,目前就職於某網際網路企業擔任系統工程師,致力於it改善生活的實踐之路,折騰各種實驗,同時熱愛生活並享受生活,可能是乙個古靈精怪的實在人。也收到了很多朋友的贊同 鼓勵 同時間也認識了更多的朋友,會做更多的交流,甚至以自已的角度給一些意見 ...

用wine在ubuntu執行O語言開發環境

o語言 http olanguage.org 最新版的wine已經可以直接支援chinese,所以,現在試著執行olide.exe,應該就可以看到了,但字型極其難看!配置字型,進入windows的分割槽,進入 windows fonts,把simsum.ttc複製到 wine dosdevices ...

實戰分享 我在社群O2O企業是如何做使用者運營的?

文 趙文彪 筆者所在的o2o企業是國內一家率先踐行新零售理念 並打通線上線下生活場景的一站式社群共享服務平台。以app為線上工具,以社群三公里為輻射半徑,通過線下門店為居民提供各種社群服務。在短短的一年多時間裡,覆蓋社群 12173 個,使用者呈爆發性增長,擺在眼前的問題就是 如何搭建一套可落地的使...