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 和 @autoreleasepool 块有啥区别?
iPhone:关于 NSAutoreleasePool 的困惑