双括号方法语法。

时间:2011-12-29 16:24:26

标签: objective-c ios cocoa-touch syntax

我对某种方法语法有疑问。

例如我知道这是做什么..

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

对类执行alloc(在本例中为NSString),并在类的实例上执行init。

如果我们有

[variable method];

我知道它的功能如何...方法是在“变量”

上执行的

如果我有

variable = [instance method];

“方法”方法在实例上执行并存储在变量..

但是我迷路的地方就是这样......

[[CCDirector sharedDirector]something:parameter];

我不确定在哪里采取行动......

4 个答案:

答案 0 :(得分:5)

[CCDirector sharedDirector]正在获取导演的单例实例。然后,您使用something调用parameter方法。这与此相似

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

答案 1 :(得分: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];

答案 2 :(得分:0)

[CCDirector sharedDirector]CCDirector上的一个方法,并返回一些对象。很像[NSString alloc]。该行的其余部分调用返回的对象上的方法。

答案 3 :(得分:0)

正如@hspain所指出的,它是一个用于表示单例实例的约定。实际的alloc / init发生,并且只在sharedDirector中发生一次。

Here is more information关于objective-c中的单例模式。