iOS [NSArray array] 和 [[NSArray alloc]init]

alloc (內(nèi)存分配)以及init(初始化) Objective-C 協(xié)議分為非正式協(xié)議和正式協(xié)議。

這兩個方式都是建立一個空的Array,[NSArray array]不需要release,使用autoreleasepool機(jī)制。

[[NSArray alloc] init]需要自己手動release。

項目使用崩潰實(shí)例:

在ViewDidLoad中,

jsonDataDic = [NSMutableDictionary dictionary];?

?[self jsonParse];

創(chuàng)建一個空字典,在jsonParse中使用了這個詞典,導(dǎo)致程序崩潰。

解決方法:在jsonDataDic前面加上self.即可

原因:不加的話,指針的作用域僅在ViewDidLoad中,進(jìn)入jsonParse后該指針已釋放,成為了一個野指針,再對其進(jìn)行操作,使程序崩潰。

注意:字典是沒有順序的,字典的allkeys或者allvalues存放到數(shù)組中是隨機(jī)的。


那self.和 _有什么區(qū)別呢,再說下這兩個 :

self.programStack等于[self programStack],會走你的懶加載方法;

而_programStack類似于self->_programStack。

用self點(diǎn)出屬性是更好的選擇,因為這樣可以兼容懶加載,同時也避免了使用下劃線的時候忽視了self這個指針,后者容易在block中造成循環(huán)引用。

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

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