簡體   English   中英

Objective-C:addObjectsFromArray是否復制對象?

[英]objective-c: does addObjectsFromArray copy objects?

很難弄清楚這個...

是NSObject內部的便捷方法addObjectsFromArray復制所有內容,還是將'otherArray'參數保留在內存中,LinkedList樣式的尾部是否指向'otherArray'這種動作?

我問是因為我有一些指向現有數組中重要對象的指針,但是這些指針可能指向傳入數組上的另一個對象。

我將重要對象指針重新指向傳入數組內的某個對象,然后使用傳入數組在現有數組上調用addObjectsFromArray。

我擔心的是,當ARC決定取消傳入數組時,如果實際上復制了傳入數組,則我重新指向的重要對象指針將不指向任何內容。

我認為您對此太想了。 您將沒有“插入” NSArray的指針。 您將擁有一個指向對象的指針,並且NSArray也將具有指向該對象的指針。 重新分配指針不會更改NSArray中的指針。

至於復制,NSArray不復制對象。 但是如上所述,它確實將指針復制到對象,而不是持有指向指針的指針或類似的東西。 所以在這段代碼中:

NSMutableString *a = [NSMutableString stringWithString:@"Cool"];
NSMutableString *b = a;
NSMutableArray *array = [NSMutableArray array];
[array addObject:a];
NSMutableString *c = [array objectAtIndex:0];
[b appendString:@" beans"];
a = nil;

運行結束時:

  • bc將具有相同的NSMutableString-“ Cool bean”-並且對它們中的任何一個進行突變都會在另一個中顯示

  • 該數組與bc擁有相同的NSMutableString(“酷豆”),訪問那里的字符串也將顯示該字符串的突變

  • a將為零。 重置字符串時,這不會影響任何其他指向該字符串的指針,因為它們指向字符串,而不是變量。

當您添加addObjectsFromArray: ,就好像您遍歷數組並單獨添加每個數組一樣。 另一個數組此時可以消失,這沒有關系,因為您的NSArray現在具有指向所有對象的指針。

我認為addObjectsFromArray就像addObject一樣addObject :將指向對象的指針添加到數組中; 除了保留計數(遞增)之外,該對象本身沒有被修改。

暫無
暫無

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

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