[英]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;
运行结束时:
b
和c
将具有相同的NSMutableString-“ Cool bean”-并且对它们中的任何一个进行突变都会在另一个中显示
该数组与b
和c
拥有相同的NSMutableString(“酷豆”),访问那里的字符串也将显示该字符串的突变
a
将为零。 重置字符串时,这不会影响任何其他指向该字符串的指针,因为它们指向字符串,而不是变量。
当您添加addObjectsFromArray:
,就好像您遍历数组并单独添加每个数组一样。 另一个数组此时可以消失,这没有关系,因为您的NSArray现在具有指向所有对象的指针。
我认为addObjectsFromArray
就像addObject
一样addObject
:将指向对象的指针添加到数组中; 除了保留计数(递增)之外,该对象本身没有被修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.