簡體   English   中英

將類添加到NSMutableArray並同時更改該對象和數組時會發生什么?

[英]What happens when you add a Class into NSMutableArray and you change both that object and the array?

假設您有幾個Class對象聲明,並將其添加到NSMutableArray中,然后修改Class對象和NSMutableArray對象。 怎么了?

代碼示例:

MyClass *item1;
MyClass *item2;
NSMutableArray *itemHolder;

item1 = [[MyClass alloc] init];
item2 = [[MyClass alloc] init];
itemHolder = [[NSMutableArray alloc] initWithObjects:item1,item2,nil];

-(void)someFunction{
  [item1 setVarName:@"item1"];
  [item2 setVarName:@"item2"];
  for(MyClass *items in itemHolder) [items setVarName:@"item"];
}

我想我通常在將item1和item2添加到itemHolder后釋放它,但是它不會違反內存管理規則,對嗎? 因為在dealloc最后,您仍然可以釋放所有內容

-(void)dealloc{
  [item1 release];
  [item2 release];
  [itemHolder release];
}

當您將對象(item1和item2)添加到數組時,該數組僅存儲指針。 對象本身不會被復制。

因此,當您在item1上設置setVarName或在NSArray的第一項上設置setVarName時,這兩個操作都會影響完全相同的對象(相同的實例)

至於內存mgmt,當您將項目添加到NSArray時,NSArray(是否可變)將保留每個項目。 釋放數組后,它將釋放每個數組。

如果您還有其他需要分別保留每個項目,則應這樣做(例如您的示例)。 但是請記住,在普通程序中,由於數組保留了新對象,因此您經常會向該數組中添加新對象並立即釋放它們。

但是,再次強調,不看具體示例就很難一概而論。

如果嘗試釋放已發布的內容,則可能會得到EXC_BAD_ACCESS或分段錯誤。 嘗試確保您不會兩次釋放同一對象。

如果釋放數組中包含的對象,然后釋放item1或item2,則將兩次從兩個不同的引用中釋放相同的對象

如果更改類對象,那么數組中的版本也會受到影響,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM