2016-08-09 91 views
-1

如果我有一些數值,即分配一些內存。 如果我將爲數組分配新的內存,前面的內存會發生什麼。先前分配對象的內存會發生什麼?

self.array = [[NSMutableArray alloc] initWithObjects:anObject, nil]; 

self.array = [[NSMutableArray alloc] initWithObjects:anObject2, nil]; 

會發生OBJET anObject的記憶是什麼,它將被保存在內存中,否則會從內存中刪除自動分配新的內存後?

+0

不知兩條線,寫在該序列時,將在由編譯器在僅執行第二分配的方式進行了優化。 – ff10

+1

很基本的問題。你在使用ARC還是MRR?你有'self.array'的自定義setter方法嗎?你有沒有讀過任何*文檔? – Droppy

回答

0

您的第一個陣列上的對象@"1"實際上是指向NSString對象的指針。 通過覆蓋數組中的值釋放指針後,將取消分配NSString實例佔用的內存。新的字符串對象(@"2")並不需要存儲在同一個內存中。

0

在第二次分配內存之前,以前的數據將丟失,如 self.array = [[NSMutableArray alloc] initWithObjects:@「2」,nil];在前面的內存位置做這個對象 self.array = [[NSMutableArray alloc] initWithObjects:@「1」,nil]; 將不再存在。

0

對象的內存會發生什麼事anObject,它會保存在內存中還是會在分配新內存後自動從內存中刪除?

明確地回答這個問題是不可能的,因爲它取決於其他未知因素。

我想你想了解的是數組的內存所有權模型(NSArray,`NSMutableArray)。希望這個猜測是正確的:

首先想想的所有權。一個對象是由它的第一個所有者創建的,可以在其一生中擁有多個所有者,並且在它沒有所有者之後的某個時候會死掉。根據ARC所有權爲您處理與等屬性組合。根據MRC,所有權屬於手動使用方法,如retainrelease

數組和字典,套等,使用模型:

  • 當一個項目被添加到集合所有權採取該項目。

    • 當一個項目從集合中刪除時,所有權被放棄。

    • 當一個集合本身變爲無主時,它將放棄其包含的所有項目的所有權。

所以在您的特定情況下發生了什麼anObject至少上取決於:

  • 無論第一NSMutableArray有其他業主。

  • 是否anObject本身有其他業主。

還有一些對象由應用程序有效擁有,所以它們從不會死(它們在應用程序終止時死亡)。一個常見的不朽對象是一個字符串文字,所以如果anObject是一個字符串,它可能會生存。

HTH

相關問題