Можете ли вы привести конкретный пример проблемы, с которой вы столкнулись?
Однажды я столкнулся с такой ситуацией, когда имел дело с MapKit (условия гонки, включающие обратные вызовы делегатов и освобождение делегатов). Тем не менее, в целом, я думаю, что это указывает на плохое проектное решение, когда ваш делегат становится недействительным из-за условий гонки, но я могу ошибаться.
Как правило, объекты, которые используют ваш делегат, должны существовать в контексте самого делегата. Так, например, тот же класс, который содержит различные IBOutlet
s, которыми вы хотите управлять с помощью обратных вызовов делегата, также должен быть делегатом этих IBOutlet
s. Таким образом, когда класс (то есть делегат) освобождается, IBOutlet
(надеюсь) также освобождаются, поэтому они не будут делать обратные вызовы ни к чему.
Бапа прав. В более общем случае, если у вас потенциально длинный обратный вызов делегата, убедитесь, что 1) делегат является объектом, который не будет освобожден в течение жизненного цикла делегатора (например, UINavigationController
, управляющий UIViewController
s) или 2) во время освобождения делегата объект delegate
делегата устанавливается в ноль.
... Это последнее предложение было полным ртом. :)