Не могу назначить делегата - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть два контроллера представления. Поток между ними выглядит следующим образом:

VC1 создает VC2 и устанавливает для VC2.delegate значение self. В VC2 свойство делегата назначается, а не сохраняется. Когда отображается VC2, VC1 освобождается, поэтому свойство делегата VC2 является объектом-зомби. Предполагается, что VC2 получает некоторые данные с сервера и вызывает делегата с этими данными, но это не сработает, поскольку делегат уже был освобожден.

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

Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2011

Вы должны установить делегата на ноль, прежде чем вы сделаете VL1.VC2 не должен знать VC1 (только с каким протоколом он соответствует).

При сохранении VC1 в VC2, VC1, вероятно, никогда не будет освобожден.(только с действительно уродливой структурой кода)

Очевидно, что когда объект VC1 освобожден, то это должно сделать его очистку, поэтому он должен установить делегат равным nil.

Возвращаясь к вашему вопросу: вы никогда не должны оставлять делегата.Это просто конструкция кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...