我的内存素材出现问题,即使我已经在紧密循环中正确释放了对象,它也会不断增加。一段时间后应用程序将崩溃,出现“内存不足错误”... 我已经解决了这个问题:
/******************** Begin SimpleObject ***********/
//@interface SimpleObject : NSObject {
//@public
// int iVarA, iVarB;
// int iVarC;
//}
//-(id) init;
//-(void) dealloc;
//@end
//@implementation SimpleObject
//- (id) init { return [super init]; }
//- (void) dealloc {
// // NSLog ( @"SimpleObject dealloc" );
// [super dealloc];
//}
//@end
/******************** End SimpleObject ***************/
NSAutoreleasePool *looppool = [[NSAutoreleasePool alloc] init];
for ( int i = 0; i < 1000; i++ ) {
// This lead to the same problem
// void *pVoid = malloc( 10000 );
// free( pVoid );
// End This lead to the same problem
SimpleObject *obj = [[SimpleObject alloc] init];
[obj release];
}
[looppool drain]; // whether or not I am using NSAutoreleasePool did not matter at all...
内存可能是碎片,但操作系统不应该处理这个问题吗?此外,分配之间没有任何内容......
任何想法都将受到高度赞赏。谢谢!
答案 0 :(得分:3)
您是否,使用NSZombiedEnabled环境变量?这可以解释内存的累积,虽然它不能解释为什么你只使用malloc看到这个问题。
答案 1 :(得分:2)
问题在于SimpleObject的实现。请向我们展示init和dealloc方法的代码。
确保在SimpleObject的init方法中分配的所有内容都在其dealloc方法中释放。这适用于malloc和free的内容。
确保从SimpleObject的init方法返回self。
编辑:
我刚刚使用以下SimpleObject
声明编译并运行问题中发布的代码@interface SimpleObject : NSObject
{
char foo[10000];
}
@end
运行良好,没有泄漏。
编辑2:
刚刚看到有关此问题的评论是模拟器上的一个问题。我很容易相信模拟器泄漏了。在设备上试一试,看看代码是否仍然泄密。
答案 2 :(得分:0)
您正在处理SimpleObj的发布,对此毫无疑问。
这意味着问题必须在SimpleObj中,查看dealloc方法并确保释放其中的所有内容。
答案 3 :(得分:0)
我根据您问题中的界面创建了一个SimpleObject类,并运行了您粘贴的循环代码。没有崩溃。 Allocations和Leaks都将一切都列为正常工作。
你能发布SimpleObject的所有代码吗?这就是问题所在,所以我们需要完整地看待它才能提供帮助。