2011-01-28 3 views
3

Я не собираюсь вдаваться в то, что называется, когда и почему. (Есть много на это уже)Кодирование избыточности ... я должен вызвать viewDidUnload в dealloc

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

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     self.foo = nil; 
     self.bar = nil; 
} 

- (void)dealloc { 
     [super dealloc];   
     [foo release]; 
     [bar release]; 
     [abc release]; 
} 

Резервный код, ick. Кто-нибудь знает проблемы в этом больше?

- (void)viewDidUnload { 
     [super viewDidUnload]; 
     [foo release]; 
     foo = nil; 
     [bar release]; 
     bar = nil; 
} 

- (void)dealloc { 
     [super dealloc]; 
     [self viewDidUnload]; 
     [abc release]; 
} 

Конечно, у меня есть дополнительный вызов [super viewDidUnload], но я полагаю, что это не проблема, потому что он просто делает материал, который был бы сделан в dealloc все равно. Я также переключил viewDidUnload, чтобы он не использовал аксессоры.

+0

Кроме того, вы должны называть [super dealloc] последним в вашем методе dealloc, а также с [super viewDidUnload], если ваш родительский контроллер также выполняет некоторую разгрузку. У нас возникли странные ошибки, вызванные сначала вызовом [super dealloc] ... (и наоборот для методов загрузки - вызовите [супернагрузка], прежде чем делать что-либо еще). – bandejapaisa

ответ

2

Я определяю свои методы deallocs и nil в методе -releaseOutlets. (Я поставил здесь больше, чем выпущенные выпуски, для меня это просто историческое событие.) Затем вызовите этот метод из каждого. Не вызывайте viewDidUnload из своего dealloc, это неопределенное поведение и может быть изменено в любое время.

5

Я не уверен, является ли это безопасно неоднократно называть viewDidUnload, но ничего не мешает вам факторизуя выпуск/nilling в третий метод, который вы называете от обоих viewDidUnload и dealloc.

+0

Я думал об этом как о другом. Я просто не знал, нужен ли мне метод среднего человека, или я мог бы пропустить его и уменьшить сложность. – DBD

 Смежные вопросы

  • Нет связанных вопросов^_^