Эти строки из -viewDidUnload
оба выпуска data
:
[self.data release];
self.data = nil;
Поскольку вы используете установщик свойств во второй строке, а data
является сохраняемым свойством, установщик выдаст data
. Это избыточный выпуск, и он вызовет сбой сразу или позже, в зависимости от того, сохранят ли этот объект другие объекты. Чтобы исправить, просто удалите первую строку и положитесь на установщик, чтобы сделать правильную вещь.
Метод -dealloc
, с другой стороны, не должен использовать сеттер, как сейчас. Вам следует изменить:
[self.data release];
до:
[data release];
data = nil; // this line isn't strictly necessary, but often considered good form
Причина в том, что вполне возможно, что этот класс может быть разделен на подклассы, и кто-то может переопределить установщик свойств таким образом, что у него есть некоторые побочные эффекты, которые могут вызвать проблемы, когда объект освобождается. Вы должны получить доступ к ивару напрямую - обратите внимание, что я остановился на «я». так что мы имеем дело с ivar, а не с accessor. (-init
и -dealloc
- единственные места, где вам нужно беспокоиться об этом; используйте средства доступа к свойствам везде.)