如何在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 并查看两次释放的对象。

最后,如果仍然没有帮助,请将您的代码添加到问题中,我们都可以看看:)

【讨论】:

这告诉我你需要自动释放 argssocketControl - 它们正在被你初始化但没有被释放。但是,它们并不是您的游泳池崩溃的原因。我认为这是您的问题中对[pool release] 的第二次调用导致崩溃? @deanWombourne:不,_socketControl 是一个实例变量并且被正确保留。分析器指向NSNumber对象的泄漏 @newacct - 哎呀,你说得对:)对不起,我回答得太快了,真丢脸!

以上是关于如何在iphone中使用自动释放的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ARC 在 iOS 中处理自动释放的对象

如何在 iPhone / iPad 的应用程序中正确使用保留和释放

iphone内存管理问题

如何在 iphone 中释放系统库分配(框架相关)

iphone基本发布问题

iphone:多次自动释放对象