2011-12-29 3 views
1

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

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

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

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

Если мы имеем

[variable method]; 

Я знаю, как это функция тоже .. способ выполняется на «переменный»

, если у меня есть

variable = [instance method]; 

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

Но где я заблудиться это на что-то, что выглядит как это ..

[[CCDirector sharedDirector]something:parameter]; 

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

+0

Важно понимать, что то, о чем вы говорите, не является процедурным. Этот метод не выполняется для переменной или класса. Вы отправляете сообщение переменной или классу, и в этом конкретном случае отправляемое сообщение является именем метода. –

ответ

5

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

CCDirector* director = [CCDirector sharedDirector]; 
[director something:parameter]; 
+0

Спасибо, это имеет смысл теперь полностью. – Heartbound07

0

Скобки означают одинаково везде. Выражение сообщения [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].

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

[[CCDirector sharedDirector] 
    something:parameter]; 
0

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

0

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

Here is more information на одноэлементный узор в объективе-c.

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