添加到NSMutableArray时重用循环中的对象

时间:2010-01-05 18:54:28

标签: objective-c nsmutablearray

在循环中向NSMutableArray添加对象时,有哪些最佳实践可以重用为要添加到数组的对象分配的内存?

例如:

for (int i = 0; i < 5; i++)
{
    SampleObject *sampleObject = [[SampleObject alloc] init];
    sampleObject.someProperty = ...

    [sampleObjectArray addObject:sampleObject];
    [sampleObject release];
}

这是正确的做法吗?我将sampleObjectArray作为属性(非原子,保留)。它应该是复制而不是保留吗?

分配出循环然后在循环完成时释放会不会更好?

1 个答案:

答案 0 :(得分:4)

您是否对自己的代码进行了分析,发现这对您来说是一个问题?如果没有,不要担心微观优化它。

也就是说,数组保持对它们包含的对象的强引用 - 当对addObject:的调用完成时,sampleObjectArraysampleObject上有一个保留。所以我认为你给出的示例代码是合适的 - 你alloc / init对象,所以你release酌情它,并且只保留它所在的数组。

至于alloc离开循环,我不确定它是否会起作用 - 对于阵列中的每个条目,你仍然必须alloc,以免最终结束五个副本相同的对象。这最好在一个循环中完成,如果它在一个循环中,为什​​么不在相同的循环中呢?