为什么经常在使用局部var后立即调用release,而不仅仅是自动释放

|| 我经常看到如下内容:
UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@\"Show\" style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)];          
  self.navigationItem.rightBarButtonItem = anotherButton;
  [anotherButton release];
特别是在使用本地变量(在这种情况下为\'anotherButton \')的情况下,然后将其释放。这与在分配它并在方法结束之前确保已使用它时自动释放它完全相同吗?即:
UIBarButtonItem *anotherButton = [[[UIBarButtonItem alloc] initWithTitle:@\"Show\" style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)] autorelease];          
  self.navigationItem.rightBarButtonItem = anotherButton;
我之所以问是因为,我第一次看到它是在很多时候完成的,但是对我来说,直接将其完全自动释放的错误感较小。这仅仅是个人风格的问题,还是这两种方法有区别,除了一种方法是在用完所有对象之后有条不紊地释放对象,另一种则是小心地声称它一开始就被释放了,所以不会偶然忘记,都有优点。     
已邀请:
在优化性能和响应性时从表中明智地分配内存表7-2分配内存的技巧:   小费      减少对自动发行的使用   对象。      采取的行动      使用自动释放释放的对象   方法留在内存中,直到您   明确消耗电流   自动释放池或直到下一个   事件循环中的时间。每当   可能,避免使用自动释放   何时可以改为使用   释放内存的释放方法   立即被对象占据。如果   您必须创建适量的   自动释放的对象,创建本地   自动释放池并排干   定期回收内存   下一个事件之前的那些对象   环。     
自动释放某些内容时,会将其添加到一组对象中,这些对象将在将来的某个时刻释放。这意味着那些对象仍然存在。由于iOS提供的内存量有限,因此建议您尽可能使用release而不是autorelease。您不希望程序因内存不足而崩溃,因为您有很多自动释放的对象。     
很好的问题。通过自动释放,您将延迟对象的自动释放。当您需要从方法中返回某些内容时,这一切都是好事,很正常,这是预期的行为,但是将对象保留在内存中的时间超过必要时间可能会对您的应用产生影响。 通过在完成时释放它,可以释放资源,并且该内存可能在运行时被另一个对象使用。在Cocos2D中,自动发行几乎所有内容的一切似乎正常,这是标准做法,但这仍然给我带来了错误的感觉,在一般实践中我不会这样做。     
他们完成同一件事。有些人认为您应尽可能避免使用自动发布,因此强烈希望尽快选择发布。昨天才在这里讨论过。 在您引用的代码中,两者之间的差异确实很小。即使释放了
anotherButton
,也不太可能将其释放,因为对
self.navigationItem.rightBarButtonItem
的赋值可能会导致
anotherButton
被保留。 在这种情况下,IMO和在这种情况下尽快调用release的最佳论据是,通过释放ѭ2,您可以明确证明已使用完该事实。另外,如果您在发行后使用
anotherButton
,则静态分析仪也会对您有帮助。这两个事实可以帮助您避免错误,并使代码更易于理解。 在这种情况下支持自动释放的观点是,它可能在某种程度上更易于阅读。我认为Apple提供给我们所有这些便捷方法的原因,例如+ stringWithFormat:-它们使您可以通过一种方法(而不是三种方法)创建并使用所需的字符串。     

要回复问题请先登录注册