Метод вызова как свойство Objective-C - PullRequest
2 голосов
/ 08 января 2012

В чем разница между этими двумя?

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

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

1 Ответ

3 голосов
/ 08 января 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...