Как вы вывесили, те идентичны. Однако существует разница между прямым доступом к ивару и прохождением через собственность. Если вы установите строку как так:
self.aString = someString;
Что бы пройти через автоматически сгенерированный сеттер, который, на основе вашей декларации собственности будет сделать копию SomeString. Это предпочтительнее в случае работы с изменяемыми строками. Вы не хотите, чтобы строка менялась из-под вас. В обоих примерах, которые вы использовали, вы непосредственно устанавливаете значение _aString в ссылку на строку, поэтому, если строка является изменяемой строкой, принадлежащей кому-то другому, она может измениться без предупреждения и привести к неожиданным результатам.
Обычно лучше пройти через сеттер (self.property = foo
), а не напрямую обращаться к ivar, так как возможно, что у установщика для свойства есть какое-то поведение, которое вы можете захотеть, и прямой доступ к нему обходит это. Конечно, бывают ситуации, когда требуется прямой доступ к ivar, но лучше всего использовать свойство по умолчанию.
Я думаю, что должен ответить на ваш вопрос. Просто [Изменить] ваш вопрос и пинговать меня, если это не так. –
Спасибо большое @JoshCaswell, мне нужно улучшить свои навыки поиска! но да, у этого есть на самом деле ответ http://stackoverflow.com/questions/1314173/using-self-ivar-when-accessing-instance-variables-directly –