Разница между доступом к свойству через "propertyname" и "self.propertyname" в target-c? - PullRequest
3 голосов
/ 09 марта 2011

Каково значение nce между доступом к свойству через «имя свойства» и «self.propertyname» в target-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 ]

1 голос
/ 10 марта 2011

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

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

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

1 голос
/ 09 марта 2011

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

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

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

...