Утечка памяти iPhone в тесной петле - PullRequest
1 голос
/ 13 октября 2010

У меня проблемы с кадрами в памяти, они продолжают увеличиваться, даже если я правильно отпустил объекты в узком цикле.Через некоторое время приложение вылетает с ошибкой «нехватки памяти» ... Я уточнил проблему следующим образом:

/******************** 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...

Память может быть фрагментирована, но ОС не справляетсяэта проблема?кроме того, между распределениями нет ничего ...

Любые мысли будут высоко оценены.Спасибо!

Ответы [ 4 ]

3 голосов
/ 13 октября 2010

Возможно, вы используете переменную окружения NSZombiedEnabled? Это объясняет наращивание памяти, но не объясняет, почему вы видите эту проблему, используя только malloc.

2 голосов
/ 13 октября 2010

Проблема в реализации SimpleObject.Пожалуйста, покажите нам код для методов init и dealloc.

Убедитесь, что все, что вы выделяете в методе init SimpleObject, освобождается в его методе dealloc.Это относится к вещам, которые вы malloc и бесплатно тоже.

Убедитесь, что вы возвращаете self из метода init SimpleObject.


Edit:

Я только что скомпилировал и запустилкод, размещенный в вопросе со следующим объявлением для SimpleObject

@interface SimpleObject : NSObject
{
    char foo[10000];
}
@end

Работает нормально, без утечек.


Редактировать 2:

Только что видел комментарийо том, что это проблема на симуляторе.Я мог легко поверить утечке симулятора.Попробуйте сделать это на устройстве и посмотрите, не пропустит ли код.

0 голосов
/ 13 октября 2010

Я создал класс SimpleObject на основе интерфейса в вашем вопросе и выполнил вставленный вами код цикла.Без падений.В распределениях и утечках все перечислено как работающие нормально.

Не могли бы вы опубликовать ВСЕ код для SimpleObject?Вот в чем проблема, поэтому нам нужно увидеть ее полностью, чтобы помочь.

0 голосов
/ 13 октября 2010

Вы правильно имеете дело с выпуском SimpleObj, в этом нет сомнений.

Это означает, что проблема должна быть внутри SimpleObj, посмотрите на метод dealloc и убедитесь, что вы все там выпустите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...