[英]IPhone Leaking Memory in tight loop
我的記憶鏡頭有問題,即使我已經正確釋放了緊密的對象,它仍在增加。 一段時間后,該應用程序將崩潰並顯示“內存不足錯誤” ...我已將問題細化為:
/******************** 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...
內存可能是零散的,但是操作系統不應該解決這個問題嗎? 此外,分配之間沒有任何關系...
任何想法將不勝感激。 謝謝!
您是否正在使用NSZombiedEnabled環境變量? 這將解釋內存的增加,但不會解釋為什么僅使用malloc會看到此問題。
問題出在SimpleObject的實現中。 請向我們展示init和dealloc方法的代碼。
確保在SimpleObject的init方法中分配的所有內容都在其dealloc方法中釋放。 這也適用於您malloc和free的東西。
確保從SimpleObject的init方法返回self。
編輯:
我剛剛編譯並運行問題中發布的代碼,並帶有以下SimpleObject聲明
@interface SimpleObject : NSObject
{
char foo[10000];
}
@end
運行正常,無泄漏。
編輯2:
剛剛在模擬器上看到有關此問題的評論。 我很容易相信模擬器會泄漏。 在設備上嘗試一下,看看代碼是否仍然泄漏。
您正在正確地處理SimpleObj的發布,對此毫無疑問。
這意味着問題必須在SimpleObj內部,查看dealloc方法並確保釋放其中的所有內容。
我根據問題所在的接口創建了一個SimpleObject類,並運行了您粘貼的循環代碼。 沒有崩潰。 分配和泄漏都將所有工作都列出來。
您可以發布SimpleObject的所有代碼嗎? 這就是問題所在,因此我們需要完整地了解它以提供幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.