iOS - пользовательский класс, имеющий ссылку на объект UIViewController - PullRequest
0 голосов
/ 25 октября 2011

Во-первых, я использую ARC и нацеливаюсь на iOS4 +

У меня есть собственный класс, для которого требуется ссылка на пользовательский UIViewController.Если я что-то не так понял, свойство retain для этой ссылки означает, что всякий раз, когда мой класс разрушается, UIViewController также уничтожается?Или это означает, что и appdelegate (который создал UIViewController) и мой пользовательский класс должны быть освобождены для того, чтобы UIViewController был освобожден?

Так что я также прочитал о свойстве __unsafe_unretained.Может ли мой пользовательский класс просто использовать это без осложнений для ссылки на UIViewController?Так как appdelegate все равно освободит UIViewController в конце, нет риска зависания указателя?

Спасибо

РЕДАКТИРОВАТЬ: пользовательский класс является одноэлементным объектом, который будет проходить через весь процессесли это имеет значение

1 Ответ

1 голос
/ 25 октября 2011

Каждый объект имеет счет сохранения, который по существу определяет, нужно ли ему остаться. В этом случае ваш AppDelegate уже сохранил UIViewController (сохранить количество 1), но это не означает, что ваш пользовательский класс также не может сохранить UIViewController (сохранить количество 2). Таким образом, ваш второй сценарий ближе к истине: когда ваш пользовательский класс разрушает и выпускает UIViewController, счетчик сохранений возвращается к 1. Затем, когда AppDelegate разрушает и освобождает его, счетчик падает до 0, и объект будет уничтожен.

Чтобы продвинуться дальше, если внутри вашего пользовательского класса вы присвоили UIViewController другому встроенному или пользовательскому классу, который также сохранил его, счетчик будет продолжать увеличиваться, а затем он будет уменьшаться, поскольку каждый из этих объектов в очередь отпустила свой интерес.

...