Почему нет необходимости выпускать Outlet, настроенный с помощью «assign»? - PullRequest
0 голосов
/ 30 апреля 2009

Я читал, что если у меня есть что-то вроде этого:

@property (nonatomic, assign) UIView *anView;

Тогда мне не нужно заботиться об управлении памятью. Мне не нужно делать [выпуск anView] в методе -dealloc.

Почему?

«assign» просто говорит компилятору: «Эй, чувак, это свойство не сохраняет того, что ему назначают». И тогда вы можете сделать

@synchronize anView;

и компилятор волшебным образом создает геттер и сеттер, где сеттер может выглядеть так:

- (UIView*) anView {
    return anView;
}

и Сеттер может выглядеть так:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

правильно / неправильно? Если это так, установщик не претендует на владение переменной newAnView, поскольку она не является свойством «сохранять». Он просто берет его и присваивает его переменной экземпляра. Таким образом, при рассмотрении политики владения нет необходимости освобождать переменную экземпляра anView в -dealloc. Объект не владеет им. Это правильно?

1 Ответ

4 голосов
/ 30 апреля 2009

Да, вы в основном правы. Давайте предположим, что сборщик мусора выключен (иначе это не имеет значения).

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

По сути, это создает слабую ссылку - anView может быть освобожден, пока свойство все еще указывает на него. Обычно вы используете «назначить» для примитивных типов данных, а не для объектов.

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