iOS: выпуск объекта, который используется (ARC)
У меня есть объект, который я создал, который подписывается на некоторые уведомления NSNotificationCenter, но он освобождается, так как у меня нет указателя на создание экземпляра. В экземпляре есть делегат, который будет вызывать метод обратно в другой класс, который у меня есть, поэтому я чувствовал, что нет необходимости также иметь указатель на него, поскольку указатель не служит какой-либо цели.
По сути, у меня есть экземпляр класса DelegateListener (имя только для примера), который подписывается на некоторые из по умолчанию NSNotificationCeneter
уведомления. Этот экземпляр не назначается ни одному указателю после его завершения. В экземпляре, однако, есть свойство делегат. Я назначаю значение этому делегату во время создания экземпляра. Этот делегат реализует методы, которые я хочу, чтобы DelegateListener вызывал при срабатывании уведомлений, на которые он подписан.
Проблема в том, что созданный мной экземпляр DelegateListener освобождается, если только я не назначу его сохраненному указателю. Есть ли способ избежать этого автоматического освобождения моего экземпляра DelegateListener в ARC?
1 ответ
Вы должны хранить DelegateListener
экземпляр в статической переменной, если у вас их нет несколько.
Я чувствовал, что нет необходимости также иметь указатель на него, так как указатель не служит никакой цели.
Указатель служит (или, по крайней мере, должен) служить цели: когда вам больше не нужно слушать уведомления, вы должны отписаться DelegateListener
от их получения. По крайней мере, это должно произойти, когда ваше приложение переходит в фоновый режим (если не нужно выполнять фоновую обработку), и когда ваше приложение завершается.
[[NSNotificationCenter defaultCenter] removeObserver:delegateListener];