当我运行我的应用程序输出时,向我展示了很多这样的字符串:
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
答案 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 框架参考。