【问题标题】:iPhone _NSAutoreleaseNoPool() problemiPhone _NSAutoreleaseNoPool() 问题
【发布时间】:2010-08-27 09:20:51
【问题描述】:

我的 main.m 中有这个:

printf("make autorelease pool \n");
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"MyAppDelegate");
[pool release];
return retVal;

当我在模拟器上运行我的应用程序时,我突然开始明白这一点:

2010-08-27 11:09:35.909 MyApp[6224:207] *** _NSAutoreleaseNoPool(): Object 0x49107c0 of class NSPathStore2 autoreleased with no pool in place - just leaking

Stack: (0xe171f 0x58d64 0x59ebd 0x599ee 0x600c7 0x31d016 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe018b1 0x8fe01057)

2010-08-27 11:09:35.911 MyApp[6224:207] *** _NSAutoreleaseNoPool(): NSPathStore2 类的对象 0x49110c0 自动释放,没有适当的池 - 只是泄漏 Stack: (0xe171f 0x58d64 0x5cd69 0x60335 0x601f1 0x31d016 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe018b1 0x8fe01057)

2010-08-27 11:09:35.912 MyApp[6224:207] *** _NSAutoreleaseNoPool(): NSPathStore2 类的对象 0x4911ce0 自动释放,没有适当的池 - 只是泄漏 堆栈:(0xe171f 0x58d64 0x6902e 0x445545 0x23198 0x29e94ae 0x29e97c4 0x29ee7c4 0x8fe036c8 0x8fe0d30a 0x8fe0d3d1 0x8fe024a9 0x8fe07950 0x8fe07950 0x8fe07950 0x8fe0d30a 0x8fe0d3d1) 制作自动释放池

有人知道是什么原因造成的吗? 非常感谢任何帮助!

【问题讨论】:

    标签: objective-c memory-management ios-simulator


    【解决方案1】:

    我想我找到了导致它的原因。我有一个加载纹理的方法,它的签名看起来像这样 +(void)load 显然,即使您没有在任何地方导入包含该方法的文件,它也会在应用程序启动时调用。将签名更改为 +(void)loadTexture 可以防止过早调用它,从而修复“错误”!

    很抱歉回答我自己的问题。我希望这可以节省一些人的时间。

    【讨论】:

    【解决方案2】:

    这可能来自没有自动释放池的线程。您必须为每个线程设置一个自己的自动释放池。即使您只使用NSOperation[NSObject performSelectorInBackground:withObject:],您也必须放置一个自动释放池。

    旁注:NSAutoreleasePool 应使用其drain 方法释放。此方法调用release,并且在非垃圾收集环境(如iOS 4)中等效。始终使用drain 是一种很好的风格。使用垃圾回收时,会触发非穷举回收。

    【讨论】:

    • 你好尼古拉谢谢!我想我找到了造成它的原因。我有一个加载纹理的方法,它的签名看起来像这样 +(void)load 显然,即使您没有在任何地方导入包含该方法的文件,它也会在应用程序启动时调用。将签名更改为 +(void)loadTexture 可以防止过早调用它,从而修复“错误”!
    猜你喜欢
    • 2010-09-19
    • 2011-10-18
    • 2011-03-08
    • 2011-10-28
    • 2011-10-03
    • 2011-06-06
    • 2011-09-20
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多