Синтаксис метода в двойных скобках. - PullRequest
1 голос
/ 29 декабря 2011

У меня вопрос по поводу определенного типа синтаксиса метода.

Например, я знаю, что это делает ..

NSString *theString = [[NSString alloc]init...blablabla];

Выделение выполняется для класса (в данном случае NSString), а инициализация выполняется для экземпляра класса ..

Если у нас есть

[variable method];

Я тоже знаю, как это работает ... метод выполняется для "переменной"

, если у меня

variable = [instance method];

метод «method» выполняется в экземпляре и сохраняется в переменной ..

Но я заблудился в чем-то, похожем на это ..

[[CCDirector sharedDirector]something:parameter];

Я неуверен, какое действие выполняется где ..

Ответы [ 4 ]

5 голосов
/ 29 декабря 2011

[CCDirector sharedDirector] получает одиночный экземпляр директора. Затем вы вызываете метод something с parameter. Это было бы похоже на это

CCDirector* director = [CCDirector sharedDirector];
[director something:parameter];
0 голосов
/ 29 декабря 2011

Как указал @hspain, это соглашение используется для обозначения одноэлементного экземпляра. Фактическое alloc / init происходит, и происходит только один раз, в sharedDirector.

Вот дополнительная информация о шаблоне синглтона в объективе-c.

0 голосов
/ 29 декабря 2011

[CCDirector sharedDirector] - это метод CCDirector, который возвращает некоторый объект. Очень похоже на [NSString alloc]. Остальная часть строки вызывает метод для объекта, который возвращается.

0 голосов
/ 29 декабря 2011

Скобки означают одинаково везде.Выражение сообщения [object arg0:value arg1:value ...] отправляет сообщение @selector(arg0:arg1:...) на object (что само по себе может быть выражением сообщения).Обработчик сообщений может вернуть объект, поэтому значение выражения сообщения само может быть получателем другого сообщения.Вложение этих выражений аналогично вызовам вложенных функций:

something(CCDirector_sharedDirector(), parameter);

CCDirector_sharedDirector() на самом деле не существует;это просто используется для сравнения.

Обратите внимание, что в:

[[NSString alloc] init...]

Это не так много, что init отправляется в экземпляр NSString (это не так, как [NSString alloc] на самом делевозвращает NSCFString ), то есть init отправляется с результатом [NSString alloc].

Если вам трудно читать вложенные сообщения, вы можете разбить их на несколько строк или использовать временные переменные .

[[CCDirector sharedDirector]
    something:parameter];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...