Я недавно заметил крах в одном из моих приложений, когда объект попытался передать сообщение его делегату, и делегат уже был выпущен.Проверка того, был ли объект выпущен перед отправкой ему сообщения
На данный момент, как раз перед вызовом каких-либо методов делегата, я запускаю этот чек:
if (delegate && [delegate respondsToSelector:...]){
[delegate ...];
}
Но, очевидно, это не учитывает, если делегат не ноль, но было высвобождены.
Кроме того, чтобы назначить делегат объекта нулю в методе dealloc
делегата, есть ли способ проверить, был ли делегированный делегат уже выпущен, просто у меня больше нет ссылки на объект.
'if (delegate)' is redundant - '[delegate отвечаетsToSelector:]' будет false, если 'delegate' равен нулю. – shosti
Интересные точки. Не думал об этом раньше. –