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
после выпуска этого.