iPhone dev - делегаты, уведомления, отказываются от подписки, прежде чем освобождено?

В проекте Visual Studio.NET щелкните правой кнопкой по ссылкам проекта и выберите 'Add Service Reference', введите URL дескриптора WSDL JIRA ( http://your_installation/rpc/soap/jiraservice-v1.wsdl ), и Visual Studio автоматически сгенерирует класс.NET для доступа к SOAP JIRA API.

названия параметра не особенно значимы, таким образом, необходимо будет вернуться к документации вполне немного сначала.

5
задан mk12 21 August 2009 в 03:08
поделиться

3 ответа

Вам необходимо удалить себя в качестве делегата, если ваша продолжительность жизни короче, чем объект, которому вы делегированы. Почти во всех случаях продолжительность вашей жизни равна или больше, чем у объекта, которому вы делегированы. Тем не менее, это хорошая привычка. Рассмотрим случай, когда вы являетесь делегатом UITableView. В -init , возможно, вы вызываете:

self.myTableView.delegate = self;

Тогда было бы разумно в -dealloc сказать

_myTableView.delegate = nil;
[_myTableView release];
_myTableView = nil;

Причина в том, что myTableView может быть сохранен другими объекты, поэтому может не освободиться, когда вы его отпустите. Если он сделает вызов делегата после вашего ухода, ваше приложение выйдет из строя. Так что очистка указателя делегата здесь - хорошая идея.

Аналогично для NSNotificationCenter, вы должны удалить себя в -dealloc таким образом:

[[NSNotificationCenter defaultCenter] removeObserver:self];

Это удаляет вас из всех наблюдений. Вы должны сделать это в -dealloc, если ваш класс когда-либо регистрируется для каких-либо уведомлений. Если вы этого не сделаете, а уведомление, которое вы наблюдали, придет после того, как вы уйдете, приложение выйдет из строя.

Это не обязательно для NSTimers, потому что NSTimers сохранят свою цель (вас).

8
ответ дан 13 December 2019 в 22:12
поделиться

Я полагаю, вы просто установили делегата равным нулю.

myOjectOrClass.delegate = nil; 
1
ответ дан 13 December 2019 в 22:12
поделиться

При переходе к методу addTarget UIControl удержание против цели не производится. Хотя в документации об этом конкретно не упоминается, я написал простой тест, чтобы доказать этот факт.

Если вы добавите цель в качестве наблюдателя события элемента управления, а затем отпустите ее, вы заметите, что счетчик удержаний уменьшается (потенциально это приведет к тому, что цель будет возвращена)

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

.
1
ответ дан 13 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: