почему удерживать делегата неправильно, каковы все альтернативы ...? - PullRequest
1 голос
/ 28 мая 2010

У меня есть одна проблема, допустим, что A и B - это 2 контроллера представления от пользователя, выдвигаемого к контроллеру представления B, в B пользователь начинает загрузку, создавая объект C (который является классом NSObject) и устанавливает B в качестве делегата для C (назначить ), теперь пользователь хочет вернуться к A, затем dealloc из B вызывает освобождение объекта, делегат C не может перезвонить (происходит сбой). Я хочу получить вызов и разрешить пользователю перейти к другому контроллеру представления, таким образом, я сохраняю делегата в Класс C, но сохранение делегата неверно ...

what are all solutions ...

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 18 мая 2015

Это происходит из-за проблемы в вашей архитектуре: вы назначаете глобальную задачу фоновой загрузки для контроллера представления, который может находиться или не находиться в памяти.

Если вы хотите продолжить загрузку независимо от наличия B, то:

  1. Создайте класс «загрузчик», который заботится о загрузке файлов (я полагаю, вы называете его C в вашем примере).
  2. У такого класса должен быть делегат типа «слабый», чтобы в случае отказа исходного делегата приложение не падало (ПРИМЕЧАНИЕ: это доступно только при использовании ARC). Если вам необходимо глобально отслеживать ход загрузки, переключитесь на NSNotification вместо делегирования, чтобы одновременно можно было отслеживать несколько объектов.
  3. Инициализировать экземпляр C где-нибудь еще: либо в A, либо до этого.
  4. Внедрить экземпляр C в B, чтобы B, создав собственный метод init или @property.
0 голосов
/ 18 мая 2015

вижу два варианта:

  1. Вам не нужны загруженные данные. Решение: установите делегата на ноль.
  2. Вам нужны данные. Решение: Вы либо устанавливаете новый существующий делегат, либо делегат должен убедиться, что он будет рядом (например, будучи одиночным)
...