我想知道,使用:
创建对象之间的区别是什么(如果有的话)NSThing *thing = [[NSThing alloc] initWithObject:object];
VS
NSThing *thing = [[NSThing thingWithObject:object] retain];
内存管理的工作原理有何不同?此外,通常的做法是什么时候使用一个与另一个?
答案 0 :(得分:8)
分配和初始化对象稍微更有效率,因为thingWithObject:
将执行alloc
,然后是init
,然后是autorelease
带有retain
的计数器,因此您可以向自动释放池添加内容。第一个选项仅涉及alloc
和init
。
就个人而言,当我想清楚对象的生命周期将由我处理时,我使用显式alloc
,并且我使用方便方法(thingWithThing:
)来获取我赢得的任何对象需要在其创建的范围之外。
例如,通常首选在循环中显式分配和初始化,这样就不会使自动释放池泛滥。对于需要在运行循环的迭代中存活的对象,我还使用显式的alloc
+ init
而不是thingWithThing:
+ retain
。