Objecitive-C中的nil
當(dāng)我學(xué)習(xí)OC的時(shí)候,我總是忍不住在對(duì)比。Actionscript是如何實(shí)現(xiàn),而oc又是如何實(shí)現(xiàn)。這不,碰到nil的時(shí)候我發(fā)現(xiàn)了很大的不同之處。做個(gè)筆記。
在as中,如果將一個(gè)對(duì)象置為null,相當(dāng)于空指針,那么后續(xù)對(duì)該對(duì)象的操作會(huì)報(bào)錯(cuò)。而在編碼中,我們常常會(huì)判斷if(obj == nul )來(lái)判斷該對(duì)象是否存在,存在的話才可以進(jìn)行后續(xù)操作。
而在oc中,nil就相當(dāng)于c、c++中的NULL指針,一般釋放對(duì)象后將對(duì)象置為nil非常重要,這樣可以防止引用非法指針導(dǎo)致程序崩潰掉。
- [obj release];//此時(shí)obj的引用計(jì)數(shù)為0
- [obj someMethod];//程序崩潰
- [obj release];
- obj = nil;
- [obj someMethod];//obj此時(shí)為nil,但不會(huì)崩潰
在objective-c中我們只用nil來(lái)檢查程序的邏輯,而不用于判斷對(duì)象是否為空來(lái)避免崩潰。這與c++是不同。objective-c在運(yùn)行時(shí)會(huì)自動(dòng)處理向nil對(duì)象發(fā)送消息(調(diào)用方法),不會(huì)報(bào)錯(cuò)崩潰掉。