initWithContentsOfFile Plist в viewWillAppear утечка памяти

Я загружаю в свои файлы plist, как показано ниже в ViewVillAppear. При первой загрузке у меня нет утечки, однако, нажимая другие кнопки / элементы tabBar и возвращаясь к этому виду, я получаю утечку. Я выпустил этот NSMutableArray в dealloc, но он все еще протекает. Немного смущен, почему. (TheProducts3 - это NSMutableArray, точно так же, как ivar в.h, а не @property или сохраненный)

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];  

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *plistPath = [rootPath stringByAppendingPathComponent:@"basket.plist"];
theProducts3 = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];

NSLog(@"Number of objects in item array %i", [theProducts3 count]);
}

Выпуск массива NSMutable здесь.

-(void)dealloc{
[theProducts3 release];
[super dealloc];
}

Любые указатели наиболее ценятся! Спасибо...

1 ответ

Решение

dealloc не является обратной viewWillAppear:, Это обратное alloc, Обратное viewWillAppear: является viewWillDisappear:,

Происходит следующее: когда ваше представление появляется, вы выделяете память, затем вы переходите к другому контроллеру представления, возвращаетесь, ваше представление появляется снова, и вы выделяете еще больше памяти, таким образом, утечка исходной памяти.

Если вашему массиву нужно просто зависать, пока ваши представления находятся в памяти, выделите его в viewDidLoad: и выпустить его в viewDidUnload: а также dealloc, Не забудьте установить переменную экземпляра в nil после выпуска этого.

Другие вопросы по тегам