NSAutoreleasePool问题

时间:2009-10-13 07:26:21

标签: iphone nsautoreleasepool

我在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)

任何人都可以帮助我吗?

提前致谢....

3 个答案:

答案 0 :(得分:1)

您的池分配和发布代码看起来很好。但是,错误消息表示在自动释放池范围之外分配了自动释放的内容。当您使用辅助线程,使用某些专业加载方法以及初始化全局变量时,通常会发生这种情况。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在你的代码中查找自动释放对象的任何位置,而不是在主运行循环之外的另一个线程中。