A имеет контроллер представления, и он создает объект "загрузчик", который имеет ссылку на контроллер представления (в качестве делегата). Загружающий элемент вызывает обратный вызов контроллера просмотра. Это прекрасно работает, пока вы остаетесь на виду, но если вы уйдете до завершения загрузки, я получу EXC_BAD_ACCESS
. Я понимаю, почему это происходит, но есть ли способ проверить, все еще выделен объект?
Я попытался проверить с помощью delegate != nil
и [delegate respondsToSelector:]
, но он задыхается.
if (!self.delegate || ![self.delegate respondsToSelector:@selector(downloadComplete:)]) {
// delegate is gone, go away quietly
[self autorelease];
return;
}
else {
// delegate is still around
[self.delegate downloadComplete:result];
}
Я знаю, что мог,
a) у объектов-загрузчиков сохраняется контроллер вида
b) сохраните массив загрузчиков в контроллере представления и установите их значения делегатов на нуль, когда я освобожу контроллер представления.
Но мне интересно, есть ли более простой способ, когда я просто проверяю, содержит ли адрес делегата допустимый объект?