В Objective-C self.property
- это свойство доступ, а не прямой доступ к переменной экземпляра. Это синтетический сахар для [self property]
или [self setProperty:]
, и поэтому имеет семантику сообщения. Современная среда выполнения Objective C может синтезировать резервную копию экземпляра (с тем же именем, что и у свойства), но вы можете создать резервную копию свойства с переменной экземпляра с другим именем или вообще без него. Другими словами,
self.property = foo;
id bar = property
и
property = foo;
id bar = property;
совсем не одно и то же.
Как правило, плохая идея смешивать прямой доступ и доступ к свойству (за исключением того, что вы должны обращаться к ivars напрямую в методах -init
и -dealloc
), поскольку вы легко столкнетесь с правилами управления памятью.