很难搞清楚这个......
addObjectsFromArray,NSArray中的一个方便方法是复制所有内容,还是将'otherArray'参数保存在内存中,并将LinkedList样式指向'otherArray'类型的移动?
我问,因为我有一些现有数组中的重要对象的指针,但这些指针可能指向传入数组上的不同对象。
我将重要对象指针重新指向传入数组中的某个对象,然后使用传入数组在现有数组上调用addObjectsFromArray。
我担心的是,当ARC决定取消传入数组时,如果传入数组实际被复制,我的重新指向的重要对象指针将指向任何内容。
答案 0 :(得分:3)
我认为你是在思考这个问题。你不会有一个指针“进入”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 beans” - 并且其中任何一个的变异都将显示在另一个
该数组与b
和c
- “Cool beans”保持相同的NSMutableString - 并且访问该字符串也会显示字符串的突变
a
将为零。当我们重置字符串时,这不影响字符串的任何其他指针,因为它们指向字符串,而不是变量。
当你addObjectsFromArray:
时,就好像你遍历数组并单独添加每个数组一样。另一个数组可能会消失,这没关系,因为你的NSArray现在有指向所有对象的指针。
答案 1 :(得分:1)
我认为addObjectsFromArray
就像addObject
一样:指向对象的指针被添加到数组中;除了保留计数增加之外,对象本身不会被修改。