Почему нет необходимости освобождать Outlet, настроенный с помощью «assign»?

StackOverflow https://stackoverflow.com/questions/805892

Вопрос

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

@property (nonatomic, assign) UIView *anView;

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

Почему?

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

@synchronize anView;

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

- (UIView*) anView {
    return anView;
}

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top