[[alloc] init]和[[thing] retain]之间有什么区别?

时间:2010-08-27 02:05:16

标签: objective-c memory-management

我想知道,使用:

创建对象之间的区别是什么(如果有的话)
NSThing *thing = [[NSThing alloc] initWithObject:object];

VS

NSThing *thing = [[NSThing thingWithObject:object] retain];

内存管理的工作原理有何不同?此外,通常的做法是什么时候使用一个与另一个?

1 个答案:

答案 0 :(得分:8)

分配和初始化对象稍微更有效率,因为thingWithObject:将执行alloc,然后是init,然后是autorelease带有retain的计数器,因此您可以向自动释放池添加内容。第一个选项仅涉及allocinit

就个人而言,当我想清楚对象的生命周期将由我处理时,我使用显式alloc,并且我使用方便方法(thingWithThing:)来获取我赢得的任何对象需要在其创建的范围之外。

例如,通常首选在循环中显式分配和初始化,这样就不会使自动释放池泛滥。对于需要在运行循环的迭代中存活的对象,我还使用显式的alloc + init而不是thingWithThing: + retain