簡體   English   中英

iPhone泄漏內存處於緊密循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM