我在iPhone2.0中使用这行代码,它工作得很好
pool=[[NSAutoreleasePool alloc]init];
[pool release];当我在iPhone3.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)有谁可以帮我?
提前感谢....
发布于 2009-10-13 08:26:19
您的池分配和发布代码看起来很好。然而,错误消息表明自动释放分配的内容超出了自动释放池的范围。在使用辅助线程、使用某些特殊的加载方法以及初始化全局变量时,经常会发生这种情况。
一旦你使用isolate the leaking bit of code,你可以尝试用另一组NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];和[pool release];来包装它。
发布于 2009-10-13 08:27:38
当对象被发送到自动释放作用域之外的autorelease消息时,就会出现该消息。在_NSAutoreleaseNoPool上放置一个断点,并检查堆栈以查看需要添加池的位置。
发布于 2009-10-13 08:28:57
在代码中寻找生成自动释放对象的任何位置,而不是在主run循环中的另一个线程中。
https://stackoverflow.com/questions/1558678
复制相似问题