在循环中向NSMutableArray
添加对象时,有哪些最佳实践可以重用为要添加到数组的对象分配的内存?
例如:
for (int i = 0; i < 5; i++)
{
SampleObject *sampleObject = [[SampleObject alloc] init];
sampleObject.someProperty = ...
[sampleObjectArray addObject:sampleObject];
[sampleObject release];
}
这是正确的做法吗?我将sampleObjectArray
作为属性(非原子,保留)。它应该是复制而不是保留吗?
分配出循环然后在循环完成时释放会不会更好?
答案 0 :(得分:4)
您是否对自己的代码进行了分析,发现这对您来说是一个问题?如果没有,不要担心微观优化它。
也就是说,数组保持对它们包含的对象的强引用 - 当对addObject:
的调用完成时,sampleObjectArray
在sampleObject
上有一个保留。所以我认为你给出的示例代码是合适的 - 你alloc
/ init
对象,所以你release
酌情它,并且只保留它所在的数组。
至于alloc
离开循环,我不确定它是否会起作用 - 对于阵列中的每个条目,你仍然必须alloc
,以免最终结束五个副本相同的对象。这最好在一个循环中完成,如果它在一个循环中,为什么不在相同的循环中呢?