разница между доступом к свойству с помощью "propertyname" и " self.имя свойства " в objective-c?
В чем разница между доступом к свойству через "имя свойства" и "самость"?имя свойства " в objective-c? Можете ли вы покрыть в ответе:
- Что такое наилучшая практика?
- как эти два подхода влияют на управление памятью (сохранение подсчетов / ответственность за управление памятью)
- любые другие преимущества / недостатки
Предположение для сценария может быть основано на следующем:
заголовок файл
@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 ответа:
С помощью
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 не заметят изменения и связанные объекты не получат новое значение.