Swift和OC中nil、Nil、NULL、NSNull的區(qū)別

? ? ? ?我們都知道nil、Nil、NULL、NSNull都表示為空但是究竟有什么區(qū)別,相信大家也很少關(guān)注。今天我們就淺聊一下這幾個(gè)空的區(qū)別

1、nil

  nil一般是指把一個(gè)對(duì)象置空,既完全是一個(gè)空對(duì)象,完全從內(nèi)存中釋放。

2、Nil

  Nil和nil基本沒有任何區(qū)別,也可以說只要是可以使用nil的地方都可以使用Nil,反之亦然。但是作為程序猿,我們應(yīng)該更加嚴(yán)謹(jǐn)一些。nil和Nil的區(qū)別在于,nil表示置空一個(gè)對(duì)象,二Nil表示置空一個(gè)類。

3、NULL

  大家都知道oc 是基于c的,并且oc是完全兼容c的,NULL源于c,表示一個(gè)空指針.

  既:int *p ?= NULL

4、NSNull

  NSNull很有意思,大家一般都會(huì)覺得,NSNull也是空,但是看著這貨又是“NS”開頭的很像一個(gè)對(duì)象,實(shí)質(zhì)上NSNull的確是一個(gè)對(duì)象,他繼承于NSObject。那它和nil的區(qū)別在哪里呢?nil是把一對(duì)象完全釋放,就是完全從內(nèi)存中釋放。但是當(dāng)我想把一個(gè)對(duì)象置空但是又想要一個(gè)容器的時(shí)候,我們就可以使用NSNull。比如一瓶礦泉水,我們不想要里面的水,但是我們想保留瓶子一樣。看一下代碼的區(qū)別

swift:

// ?定義一個(gè)數(shù)組

let mutableArray = NSMutableArray()

// 定義一個(gè)字典

let mutableDictionary = NSMutableDictionary()

// 定義NSNull

let null = NSNull()

// 添加到數(shù)組

mutableArray.addObject(null)

// 添加到字典

mutableDictionary.setObject(null, forKey: "null")

//***添加NSNull 程序運(yùn)行很正常,因?yàn)?NSNull是一個(gè)類有內(nèi)存地址的,所以添加到字典和數(shù)組都不會(huì)崩。下面是一下nil

// 添加nil到數(shù)組

mutableArray.addObject(nil)

// 添加nul到字典

mutableDictionary.setObject(nil, forKey: "nill")

//直接報(bào)錯(cuò),因?yàn)閿?shù)組和字典里面存放的都是對(duì)象,對(duì)象都是有地址的。但是nil內(nèi)存中沒有地址,所以直接報(bào)錯(cuò)

下面是oc版本的,用oc的朋友可以參考一下:

- (void)viewDidLoad {

?    [super viewDidLoad];

NSMutableArray *mutableArray = [NSMutableArray array];

  NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];

   NSNull *null = [NSNull null];

?    // ?使用NSNull,不會(huì)報(bào)錯(cuò)會(huì)正常運(yùn)行

?    [mutableArray addObject:null];

[mutableDictionary setObject:null forKey:@"null"];


?    ?// 如果我們使用nil,沒運(yùn)行時(shí)回報(bào)警告,運(yùn)行時(shí)程序會(huì)直接崩潰


?  [mutableArray addObject:nil];

? [mutableDictionary setObject:nil forKey:@"nil"];

}

以上就是nil、Nil、NULL、NSNull的區(qū)別了,在工作中我們一般只使用nil,其他三個(gè)我們平時(shí)也很少使用。但是作為程序猿的我們,

? ? ? ? 這樣的問題還是值得我們?nèi)チ私獾摹?/p>

? ? ? ? 到此就結(jié)束了,歡迎交流指正, 本人QQ:1334627194

最后編輯于
?著作權(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)容