2011-07-26 21 views
1

我有我的應用程序一個的NSMutableArray,我開始是這樣的:的NSMutableArray:如何用數據填充它,釋放它,用數據填充它再次

H-FILE

NSMutableArray *noteBookContent; 
@property (nonatomic, retain) NSMutableArray *noteBookContent; 

M-FILE

@synthesize noteBookContent; 

然後我有我打開txt文件,並閱讀其內容到一個臨時的NSString和切片此的NSString成不同的位,然後放入NSMutableArray的方法。像這樣:

NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath 
                  encoding:NSUTF8StringEncoding 
                  error:&error]; 

self.noteBookContent = [[[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"] mutableCopy] autorelease]; 

大問題是,如果我重複同樣的過程中幾次發生了什麼。在讀取新數據之前是否需要釋放noteBookContent?是否有數據混淆的可能性,例如如果一個noteBookContent有10個項目(全部被稱爲FRUIT)並且下一個noteBookContent有5個項目(全部被稱爲SALAD),那麼最終是否會有SALAD,SALAD,SALAD,SALAD,SALAD,FRUIT,FRUIT,FRUIT,FRUIT等?

對不起,如果這是顯而易見的,但我真的不明白,當我將新數據讀入已包含舊數據的NSMutableArray中時會發生什麼。

感謝您的任何解釋!

回答

8

在這種情況下,你實際上並沒有改變數組的內容 - 你完全替換了對象。舊屬性值noteBookContent-NSMutableArray實例 - 被屬性分配(.noteBookContent = ...)釋放,並被由-mutableCopy調用創建的新的單獨NSMutableArray取代。更有效的方法是這樣的:

[self.noteBookContent removeAllObjects]; 
[self.noteBookContent addObjectsFromArray:[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"]]; 
+0

謝謝。爲什麼這更高效?它實際上是否節省?我更喜歡它,因爲它更有意義。很抱歉,如果這一切都很明顯! –

+1

這樣,現有的可變數組就不會被取消分配,也不需要清理其內存 - 它可以重用已有的空間。 –

+0

@ n.evermind - 這可能更有效率,因爲每次加載文件時都不需要重新分配新的「NSMutableArray」,我說也許因爲清空數組本身就會產生成本。儀器測量成本最低。但是,如果你在文件加載後從未真正改變過數組的內容,那麼使用一個不可變的'NSArray'就是要走的路。 – PeyloW

1

你不需要做任何事情,因爲你正在使用一個屬性。該屬性自動處理可變數組的內存管理。