2012-05-14 3 views
3

Можно создать дубликат:
With ARC why use @properties anymore?Не устраняет ли ARC необходимость в свойствах объекта Objective-C?

NB: На самом деле я не думаю, что мы можем избавиться от свойств, но я пытаюсь понять рассуждения о том, почему нет. :)

Ссылаясь на this question, нам кажется, что основная причина, по которой мы используем свойства, заключается в том, чтобы избежать проблем с управлением памятью. Другими словами, создав свойство, мы избавляемся от необходимости выписывать все эти сохраняют и методы высвобождения:

- (void) setOtherObj:(MyOtherObject *)anOtherObject { 

    if (otherObject == anOtherObject) { 
    return; 
    } 

    MyOtherObject *oldOtherObject = otherObject; // keep a reference to the old value for a second 
    otherObject = [anOtherObject retain]; // put the new value in 
    [oldOtherObject release]; // let go of the old object 
} 

Поскольку ARC занимается этим сейчас, мы не могли избавиться от свойств все вместе и просто установить ivars, делая что-то вроде otherObject = anotherObject?

+0

Какова цель/роль свойств? (Игнорируйте '@property удержание' для аргумента.) Какова цель/роль ARC? –

+0

Свойства по-прежнему помогают принудительно инкапсулировать и скрывать данные. – tronbabylove

ответ

5

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

Свойства не обязательно должны поддерживаться переменными экземпляра. Например, у вас может быть свойство backgroundColor в представлении, которое фактически возвращает и устанавливает свойство backgroundColor некоторого частного подзаголовка. Или, скажем, у вас есть свойство readonly name, которое фактически не соответствует переменной экземпляра, а просто объединяет firstName и lastName.

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

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

2

Избегание проблем с памятью было очень полезным побочным продуктом свойств. Их основной целью остается контроль доступа (readonly против readwrite), а скрытие информации (т. Е. Логика получения и настройки свойства может измениться в любое время без каких-либо изменений, необходимых для пользователей вашего класса). Кроме того, если вам нужна семантика copy, она по-прежнему доступна с ARC.

0

ARC предназначен для управления проблемами, связанными с памятью. Свойства - это способ получить/установить значения. Таким образом, прибытие ARC не означает конца для свойств.