разница между доступом к свойству с помощью "propertyname" и " self.имя свойства " в objective-c?


В чем разница между доступом к свойству через "имя свойства" и "самость"?имя свойства " в objective-c? Можете ли вы покрыть в ответе:

  1. Что такое наилучшая практика?
  2. как эти два подхода влияют на управление памятью (сохранение подсчетов / ответственность за управление памятью)
  3. любые другие преимущества / недостатки

Предположение для сценария может быть основано на следующем:

заголовок файл

@interface AppointmentListController : UITableViewController {
    UIFont *uiFont;
}
@property (nonatomic, retain) UIFont *uiFont;

реализация

- (void)viewDidLoad {
    [super viewDidLoad];  

    uiFont = [UIFont systemFontOfSize:14.0];
    //VERSUS
    self.uiFont = [UIFont systemFontOfSize:14.0];

Спасибо

2 3

2 ответа:

С помощью propertyname просто обращается к переменной экземпляра . Вы несете ответственность за собственное управление памятью по ее содержимому; никакие операции сохранения или освобождения не выполняются за вас.

Using self.propertyname обычно использует accessor. Если вы используете @synthesize, созданные методы доступа будут обрабатывать управление памятью, как указано в вашей строке @property (в приведенном примере используется retain, поэтому сохранение будет выполнено при установке нового значения self.propertyname). Вы также можете написать свой собственный аксессор методы, которые делают управление, как вам нравится.

Более полное объяснение содержится в руководстве по программированию управления памятью . В этом случае лучше всего использовать @property и @synthesize для обработки переменных, а затем использовать методы доступа self.propertyname, чтобы уменьшить нагрузку на управление памятью. Руководство также рекомендует избегать реализации пользовательских методов доступа (например, использование @property Без @synthesize).

Дополнительное Примечание-это не так полезно для iPhone, так как в Cocoa Touch Нет привязок. Но если вы используете какао, полезно отметить следующее:

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

Также имейте в виду, что если вы установите экземпляр переменные непосредственно, в виде var = value, Key-Value Observing не заметят изменения и связанные объекты не получат новое значение.