你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 中由數組 NSArray 與 NSMutableArray 的使用理解偏差引發的多宗血案

iOS 中由數組 NSArray 與 NSMutableArray 的使用理解偏差引發的多宗血案

編輯:IOS開發綜合

這個簡單問題,一直以來,五年蘋果開發經驗告訴我,不值得一提,也沒有什麼可提的。

不過,今天我犯了一個不值得一提的錯誤,一直以來,自認為不值得一提的錯誤,也是不斷忽視之後,由認識變得陌生而導致的小錯誤。

題目是:遍歷一個數組,符合條件的,加入另一個數組,同時從這個數組中移除掉,以節約存儲空間。

分析:

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、由此可見,過分擔心,沒事兒找事兒,引發了這麼多血案,浪費了這麼多吐沫,希望還能有一點作用,就是用來警醒世人,不要再犯由此引發的一系列理解上偏差而造成的多宗血案;


欽此!



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved