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)引用。