【发布时间】:2012-01-03 21:54:43
【问题描述】:
考虑以下两种数组分配。
NSMutableArray* alpha = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray* beta = [NSMutableArray array];
假设没有其他东西保留alpha或beta,我的理解是两者的结果是一样的。两者的保留计数都将为 0,因此一旦它们离开作用域,它们就会被清除。
我有一个偷偷摸摸的怀疑,我没有完全理解这两者之间的微妙含义。阅读StackOverflow 的答案后,我知道后者是一种方便的方法,但我想了解其中的区别。
上面两行代码在内存管理方面有什么区别?
【问题讨论】:
-
好问题;我想知道ARC之前和之后的这两行是否有区别......
-
我知道这个问题已经得到解答,但我无法抗拒!
The retain count on both will 0非常具有误导性 - 在自动释放池下一次释放它的对象之前,保留计数将至少 1。而且您根本不能依赖保留计数,因为您不知道框架字中还有什么保留了您的对象,因此它可能不止一个(并且它可能已多次添加到自动释放池中!)。而且你不知道自动释放池何时释放它的对象。
标签: objective-c memory-management