2012-01-08 9 views
2

В чем разница между этими двумя?Метод вызова как объект объекта-C

[SomeClass.classMethod instanceMethod]; 
[[SomeClass classMethod] instanceMethod]; 

classMethod из SomeClass возвращает объект одноплодной, на котором instanceMethod называется. Оба метода работают, и Xcode не жалуется во время исполнения или кода. Однако ввод SomeClass.classMethod не отображает совпадений в выпадающем меню, тогда как [SomeClass classMethod] делает. Это просто недостающая особенность или преднамеренная попытка предотвратить такую ​​практику?

ответ

3

Точка синтаксиса (SomeClass.classMethod) - это всего лишь синтаксический сахар для отправки сообщения ([SomeClass classMethod]). Они делают равные вещи.

Вы не видите автозаполнение свойств (точка синтаксиса), вероятно, потому, что объект, который вы пытаетесь получить доступ к собственности, не правильно отлит к типу имея эту собственность:

[UIApplication sharedApplication].delegate.myproperty // <-- No completion 
[[UIApplication sharedApplication].delegate myproperty] // <-- Completion 

Это происходит потому, что delegate - это id и, следовательно, не имеет свойств (это объект общего типа), поэтому автозаполнение ничего не может предложить. Последний отправляет сообщение объекту родового типа, поэтому компилятор может предложить вам много сообщений для отправки (независимо от того, поддерживает ли этот объект их).

+0

Спасибо, это, наверное, почему. Должен помнить, что слишком часто не зависеть от автозаполнения, иногда мне приходится строить для него удар или вводить другую часть экрана. –

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