Примерно через 3 часа мне наконец-то удалось устранить утечку памяти в контроллере представления. Утечка была вызвана UIPickerView, у которого в свойстве заголовка установлено свойство «сохранить».
Следующий код смог это исправить:
- (void)viewDidLoad {
[super viewDidLoad];
myPicker = [[[UIPickerView alloc] initWithFrame:CGRectZero]autorelease];
}
- (void)dealloc {
[super dealloc];
[myPicker release];
myPicker = nil;
}
Пожалуйста, не говорите мне, как шокирует этот код ... Я знаю, что это плохо. У меня есть релиз, и авто-релиз. Проблема в том, что если я изменю или удалю какую-либо часть вышеперечисленного, утечка памяти вернется.
Я, хотя и знал, как работает объективное управление памятью С, очевидно нет ...
Почему приведенный выше код исправляет утечку памяти и как может выглядеть правильная версия кода?
-
РЕДАКТИРОВАТЬ:
Если у кого-то есть такая же проблема или она заинтересована - проблема заключалась в том, что один из других объектов в моем классе был настроен на «сохранение», а не «назначение». (Если у вас нет объекта, ему нужно присвоить свойство, а не сохранять).
Как сказал Кэннондейл, удаление дополнительного удержания исправляет все, и необходим только один релиз.