Должен ли -dealloc делать что-либо кроме освобождения памяти? - PullRequest
8 голосов
/ 23 июля 2010

Я унаследовал приложение для iPhone на работе, и я новичок в Objective-C, поэтому у меня пока нет ориентиров. Я столкнулся с кодом, похожим на этот:

- (void) dealloc {
    [[StaticObject sharedObject] showSomeDialog];

    [super dealloc];
}

Я знаю, что это осуждается на других языках. Мой паук сходит с ума, глядя на этот код.

Это распространенная идиома Objective-C? Или мне нужно исправить паршивую кодовую базу?

Ответы [ 2 ]

7 голосов
/ 23 июля 2010

Вы не должны помещать код пользовательского интерфейса в -dealloc.Общее практическое правило, используйте -dealloc только для очистки того, что вы сделали: освободить объекты, удалить наблюдателей и т. Д.

Рассмотрим, что произойдет, если этот объект будет находиться в потоке, отличном от основного потока.Теперь у вас есть код пользовательского интерфейса, работающий в неосновном потоке, что является плохой вещью .

0 голосов
/ 23 июля 2010

Вы можете сделать это по некоторым причинам отладки. Но я не думаю, что ты должен когда-либо делать что-то подобное! Это означает, что диалоговое окно запрашивается, когда объект освобождается. Поэтому, если вам нужен какой-либо механизм для отображения диалога в определенное время, не делайте его зависимым от объекта, который был освобожден. В методе dealloc вы должны просто освободить все объекты, оставленные освобожденным объектом. И не делать какие-то необычные функции приложения.

...