如何在iphone中使用自动释放
Posted
技术标签:
【中文标题】如何在iphone中使用自动释放【英文标题】:how to use auto-release in iphone 【发布时间】:2012-10-09 14:03:38 【问题描述】:我想在我的应用中使用自动发布功能。我想实现这个方法
- (void)selectorConnect: (NSArray *)args
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//some code
[pool release];
在[pool release]
行发生崩溃。任何解决方案。
【问题讨论】:
我知道这不能回答你的问题,但为什么不回答 ARC? 崩溃说明了什么? 似乎无法在 ARC 中升级我的整个应用程序,所以我们只能使用这种方法。所以,上述方法的任何解决方案? 您可以在单个文件上启用 ARC - 只需在该文件的构建阶段传递链接器标志-fobjc-arc
。
另外,我看到两个[pool release]
。它在哪里崩溃?第一个还是第二个?在您的//some code
行中,那里的代码是什么?
【参考方案1】:
当您清空自动释放池时,它会在其中的所有对象上调用 autorelease
。
如果您在使用 [pool release]
行时遇到了崩溃,那么您已经将一个对象添加到自动释放池并自己释放了它。
运行静态分析器,看看它会给你什么警告。
如果您仍然不知道,请启用 NSZombies
并查看两次释放的对象。
最后,如果仍然没有帮助,请将您的代码添加到问题中,我们都可以看看:)
【讨论】:
这告诉我你需要自动释放args
和 socketControl
- 它们正在被你初始化但没有被释放。但是,它们并不是您的游泳池崩溃的原因。我认为这是您的问题中对[pool release]
的第二次调用导致崩溃?
@deanWombourne:不,_socketControl
是一个实例变量并且被正确保留。分析器指向NSNumber
对象的泄漏
@newacct - 哎呀,你说得对:)对不起,我回答得太快了,真丢脸!以上是关于如何在iphone中使用自动释放的主要内容,如果未能解决你的问题,请参考以下文章