這個簡單問題,一直以來,五年蘋果開發經驗告訴我,不值得一提,也沒有什麼可提的。
不過,今天我犯了一個不值得一提的錯誤,一直以來,自認為不值得一提的錯誤,也是不斷忽視之後,由認識變得陌生而導致的小錯誤。
題目是:遍歷一個數組,符合條件的,加入另一個數組,同時從這個數組中移除掉,以節約存儲空間。
分析:
1、由於是同一個對象在數組之間的加減,這個只是在加、減指針而已,只是增加引用計數,並沒有增加實際內存空間分配;
2、加到沒啥問題,我聲明的目標數組是 NSMutableArray ,減的時侯,我使用的是 delete 方法,不過這個方法確實存在;
聲明
NSArray *rows = [fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; NSMutableArray *geometryRows = [[NSMutableArray alloc] init];使用
[geometryRows addObject:row];
[rows delete:row];這裡借 UIResponder 犯了這樣的一個錯誤,自動提示出了這個類的 delete 方法;
而實際上 rows 是 NSArray 其元素是不可編輯的,改成如下即可:
NSMutableArray *rows = [NSMutableArray arrayWithArray:[fileContent componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];
1、再增加,也是增加原對象的引用計數和指針地址,並不會有新的原對象內容復本內存發生分配,所以附增的內存分配很小,不用考慮;
2、離開當前環境,聲明的指針不存在了,原指針所指向的內容,不再有指針索引,則 ARC 在編譯時會檢測到,為其添加釋放內存的代碼,故無需考慮內存洩漏;
3、由此可見,過分擔心,沒事兒找事兒,引發了這麼多血案,浪費了這麼多吐沫,希望還能有一點作用,就是用來警醒世人,不要再犯由此引發的一系列理解上偏差而造成的多宗血案;
欽此!