2014-08-18 2 views
-1

При использовании stringWithFormat для NSString в операторе return, когда мы используем self. ; [self] или просто экземпляр?Когда мы используем self. или [self] в stringWithFormat?

Например, мы возвращаем [NSString stringWithFormat: @ "% @% @", self.someinstance или [self someinstance] или someinstance].

+3

Вы спрашиваете, каковы различия между использованием 'self.propertyName',' [self propertyName] 'и' _propertyName'? Если это так, то '+ [NSString stringWithFormat:]' не имеет отношения к этому вопросу. – TylerTheCompiler

+0

При использовании с оператором return. – RJ27

ответ

1

self.someinstance эквивалентен [self someinstance]. Первый использует только точечный синтаксис, который стал доступен в Objective-C 2.0.

Это в основном личное предпочтение в отношении того, какой вариант вы используете. Я предлагаю быть последовательным во всем приложении и всегда использовать один формат.

Использование someinstance самостоятельно, без self. или [self ], отличается и напрямую обращается к переменной экземпляра. Этого следует избегать за пределами ваших методов init.

+0

Зачем мне обращаться к переменным экземпляра в методе init? – RJ27

+1

Если вы используете self.someinstance в методе 'init', он вызовет метод getter/setter в экземпляре, но экземпляр, возможно, еще не полностью инициализирован. Это может вызвать странные, трудно отследить ошибки. Общее правило состоит в том, чтобы инициализировать переменную экземпляра непосредственно в методе init, и как только все будет инициализировано, тогда будет безопасно использовать методы getter/setter. Интересно, что это действует в Swift. –

1

Это действительно условность вещь, технически

self.myProperty; 

и

[self myProperty]; 

сделать то же самое (доступ к свойству через метод получения) Лично я всегда использую точечную-синтаксис для свойств и [] для методов. Кажется, я читал где-то давным-давно, это было принятое соглашение, но я не могу вспомнить, где.

_myProperty ; 

будет получать доступ к объекту напрямую, обходя геттер/сеттеры. Я бы посоветовал не использовать это, кроме конструкторов и getter/seters, хотя KVO не будет работать, если вы это сделаете. Также пользовательские геттер/сеттеры будут бесполезны, если вы используете это.

Смежные вопросы