我在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)
任何人都可以帮助我吗?
提前致谢....
答案 0 :(得分:1)
您的池分配和发布代码看起来很好。但是,错误消息表示在自动释放池范围之外分配了自动释放的内容。当您使用辅助线程,使用某些专业加载方法以及初始化全局变量时,通常会发生这种情况。
在isolate the leaking bit of code之后,您可以尝试用另一组NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
和[pool release];
包装它。
答案 1 :(得分:1)
当对象在自动释放范围之外发送autorelease
消息时,会出现该消息。在_NSAutoreleaseNoPool
上放置一个断点并检查堆栈以查看需要添加池的位置。
答案 2 :(得分:0)
在你的代码中查找自动释放对象的任何位置,而不是在主运行循环之外的另一个线程中。