奇怪的NSLog错误。内存泄漏

时间:2012-05-12 09:05:56

标签: ios xcode memory-leaks nslog

当我运行我的应用程序输出时,向我展示了很多这样的字符串:

2012-05-12 14:41:52.542 PermTour[1688:15c0b] *** __NSAutoreleaseNoPool(): Object 0x5c39520 of class NSCFString autoreleased with no pool in place - just leaking

我知道这段代码中存在的问题。因为,当我评论它时,输出是空的。

 for(int i=0;i<[dataBase.allDataBase count];i++){
        aPLace = [dataBase.allDataBase objectAtIndex:i];
        name = [aPLace.name lowercaseString];
        description = [aPLace.description lowercaseString];
        if (!([name rangeOfString:searchText].location == NSNotFound) || !([description rangeOfString:searchText].location == NSNotFound)){
            [foundedPlaces addObject:aPLace];
        }

    }

有什么想法吗?日Thnx

UPD。

当我评论所有代码时,它看起来像:

for(int i=0;i<[dataBase.allDataBase count];i++){
        aPLace = [dataBase.allDataBase objectAtIndex:i];
        name = [aPLace.name lowercaseString];
        //description = [aPLace.description lowercaseString];
        /*
        if (!([name rangeOfString:searchText].location == NSNotFound) || !([description rangeOfString:searchText].location == NSNotFound)){
            [foundedPlaces addObject:aPLace];
        }
         */

    }

还是内存泄漏..那你觉得现在写什么?

UPD 2 enter image description here

2 个答案:

答案 0 :(得分:2)

当您处理大量数据(内存)时,最好使用NSAutoreleasePool

编辑 -

-(returnType)yourMethod:(returnType)parameter @autoreleasepool
{
    @autoreleasepool
    {
         //method body.
    }
}

希望这会对你有所帮助。

答案 1 :(得分:1)

我看到此错误消息是类初始化方法(例如+initialize+load或其他自定义方法。)

我的解决方案就是创建一个自动释放池,如下所示:

@autoreleasepool
{
     initThis();
     [That init];
}

@autoreleasepool关键字可用于具有类似语义的ARC和非ARC项目。

以下是关于此事的small print

  

NSApplication类设置自动释放池(实例)   NSAutoreleasePool类)在初始化期间和事件内部   循环特定的,在其初始化(或sharedApplication)中   并运行方法。同样,Application Kit添加的方法也是如此   NSBundle在加载nib文件期间使用自动释放池。   这些自动释放池不在范围之外   相应的NSApplication和NSBundle方法。通常,一个   应用程序在事件循环运行时创建对象或   通过从nib文件加载对象,所以通常缺乏访问权限   不是问题。 但是,如果你确实需要在其中使用Cocoa类   main()函数本身(除了加载nib文件或者   实例化NSApplication),您应该创建一个自动释放池   在使用这些类之前,然后在完成后释放池。   有关更多信息,请参阅Foundation中的NSAutoreleasePool   框架参考。