2010-07-23 76 views
2

有以下两个代码段之间的任何实际的区别:Objective-C的移动阵列(内存管理)之间的项目

NSObject * obj = [[_mutableArrayOne objectAtIndex:i] retain]; 
[_mutableArrayOne removeObject:obj]; 
[_mutableArrayTwo addObject:obj]; 
[obj release];

NSObject * obj = [_mutableArrayOne objectAtIndex:i]; 
[_mutableArrayTwo addObject:obj]; 
[_mutableArrayOne removeObject:obj]; 

回答

1

只有额外的保留/释放周期,你要求它这样做。

它可能会在时间敏感处理循环内产生一些性能影响?

+0

谢谢。这几乎是我的想法。 – Steve 2010-07-23 02:20:55

+0

removeObject删除所有的事件 - 在第二种情况下,你将不会有可变数组中的'objec'......看到我的答案... – 2010-07-23 02:22:38

+0

这是公然不真实的。在第二种情况下,当对象在* both *数组中时,有一小段时间窗口。在多线程环境中,这可能是一个问题(相反,让数组中的对象也可能成为问题)。 – JeremyP 2010-07-23 09:35:32

1

除了需要拨打retainrelease两次而不是一次,没有。最终结果是一样的。

1

如果你想拥有索引'i'中的对象,然后从数组中删除对象,然后你可以将它添加回项目后期阶段的数组。

我建议选项2应该小心:对象将不再在阵列中。

结果是不同的 - 选项1你将不得不在可变阵列和选项2“对象”将不会在阵列的“对象”(的removeObject除去所有实例)

+0

不知道我是否正确理解你。你能详细说明一下吗? – Steve 2010-07-23 02:22:20

+0

removeObject删除所有的事件 在你的第二种情况下,你首先添加'obj'的出现,然后在数组中会有重复的条目,然后你要求使用'removeObject'删除'obj'的事件,这将删除所有出现苹果苹果文档)的数组中'obj',所以没有更多的'obj'不存在于数组中 但在1例obj将出现在数组的末尾。 – 2010-07-23 02:29:33

+0

对不起,我错过了一些细节,实际上两者都是一样的 – 2010-07-23 02:37:02

1

两者都是相同的相对于Memory Management和编程逻辑。只有在第一种情况下,您必须操作一对额外的retain/release操作。