NSAutoreleasePool 问题

Posted

技术标签:

【中文标题】NSAutoreleasePool 问题【英文标题】:NSAutoreleasePool problem 【发布时间】:2009-10-13 07:26:21 【问题描述】:

我在 iphone 2.0 中使用这行代码,它工作正常

pool=[[NSAutoreleasePool alloc]init];

[pool release];

当我在 iphone 3.0 中运行这行代码时,它会在日志屏幕中显示一些泄漏消息。 那条消息是

2009-10-13 03:26:31.841 Spectrum[3946:4c2b] *** _NSAutoreleaseNoPool(): Object 0xd819d0 of class NSCFString autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x52c14d 0x536f67 0x3058deff 0xb049 0xa554 0x3050a79d 0x3050a338 0x97181155 0x97181012)

谁能帮帮我?

提前谢谢....

【问题讨论】:

【参考方案1】:

您的池分配和释放代码看起来不错。然而,错误消息表明在自动释放池范围之外使用自动释放分配了一些东西。这通常发生在您使用辅助线程、使用某些特殊加载方法以及初始化全局变量时。

一旦你isolate the leaking bit of code,你可以尝试用另一组NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];[pool release];包装它。

【讨论】:

【参考方案2】:

当对象在自动释放范围之外发送autorelease 消息时,会出现该消息。在_NSAutoreleaseNoPool 上放置断点并检查堆栈以查看需要添加池的位置。

【讨论】:

【参考方案3】:

在你的代码中寻找你创建自动释放对象的任何地方,同时在你的主运行循环之外的另一个线程中。

【讨论】:

以上是关于NSAutoreleasePool 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSAutoreleasePool

NSAutoreleasePool 和 @autoreleasepool 块有啥区别?

NSAutoReleasePool 泄漏

iPhone:关于 NSAutoreleasePool 的困惑

Instruments 中的 NSAutoreleasePool 泄漏

iPhone 上的 NSAutoreleasePool 问题