iOS: выпуск объекта, который используется (ARC)

У меня есть объект, который я создал, который подписывается на некоторые уведомления NSNotificationCenter, но он освобождается, так как у меня нет указателя на создание экземпляра. В экземпляре есть делегат, который будет вызывать метод обратно в другой класс, который у меня есть, поэтому я чувствовал, что нет необходимости также иметь указатель на него, поскольку указатель не служит какой-либо цели.

По сути, у меня есть экземпляр класса DelegateListener (имя только для примера), который подписывается на некоторые из по умолчанию NSNotificationCeneterуведомления. Этот экземпляр не назначается ни одному указателю после его завершения. В экземпляре, однако, есть свойство делегат. Я назначаю значение этому делегату во время создания экземпляра. Этот делегат реализует методы, которые я хочу, чтобы DelegateListener вызывал при срабатывании уведомлений, на которые он подписан.

Проблема в том, что созданный мной экземпляр DelegateListener освобождается, если только я не назначу его сохраненному указателю. Есть ли способ избежать этого автоматического освобождения моего экземпляра DelegateListener в ARC?

1 ответ

Решение

Вы должны хранить DelegateListener экземпляр в статической переменной, если у вас их нет несколько.

Я чувствовал, что нет необходимости также иметь указатель на него, так как указатель не служит никакой цели.

Указатель служит (или, по крайней мере, должен) служить цели: когда вам больше не нужно слушать уведомления, вы должны отписаться DelegateListener от их получения. По крайней мере, это должно произойти, когда ваше приложение переходит в фоновый режим (если не нужно выполнять фоновую обработку), и когда ваше приложение завершается.

[[NSNotificationCenter defaultCenter] removeObserver:delegateListener];
Другие вопросы по тегам