Если быть точным, когда вы пишете [myProperty doSomeAction]
, вы фактически не обращаетесь к свойству, а обращаетесь непосредственно к переменной экземпляра (используемой в качестве вспомогательной переменной свойства).
Вы получаете доступ только к свойству(через его установщик и получатель) с точечной нотацией [self.myProperty doSomeAction]
(или путем явного вызова установщика / получателя, например, [[self myProperty] doSomeAction]
, который является точным эквивалентом, поскольку это то, что компилятор переводит при компиляции вашего кода)
Таким образом, когда вы пишете [myProperty doSomeAction]
, так как он обращается к переменной напрямую - в отличие от [self.myProperty doSomeAction]
, который вызывает метод получения myProperty
, тем самым делая дополнительный вызов метода / отправку сообщения - тогда да, в теории это будет быстрее, чемвы получите одну отправку сообщения.
Но на практике вы не увидите каких-либо улучшений, поэтому нет необходимости рассматривать прямой доступ к переменной (и вы потеряете гибкость, если захотите внедрить ее другим способом).путь позже)
Более того, если вы используете Modern Runtime (что имеет место, если вы пишете код дляВ любой версии iOS, Legacy Runtime используется только в 32-битном Mac OSX), тогда явное определение вспомогательной переменной для свойства больше не требуется.Таким образом, вы можете объявить @property
в .h и @synthesize
в .m без какой-либо переменной экземпляра (компилятор сгенерирует его для вас во время компиляции), и в таком случае вы не сможете вызвать(несуществующая) переменная экземпляра!(по крайней мере, до директивы @synthesize
)