【问题标题】:Double bracketed method syntax.双括号方法语法。
【发布时间】:2011-12-29 16:24:25
【问题描述】:

我对某种类型的方法语法有疑问。

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

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

alloc 是在类(本例中为 NSString)上执行的,init 是在类的实例上执行的..

如果我们有

[variable method];

我也知道它是如何工作的。该方法是在“变量”上执行的

如果我有

variable = [instance method];

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

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

[[CCDirector sharedDirector]something:parameter];

我不确定在哪里执行了什么操作..

【问题讨论】:

  • 重要的是要了解您所说的不是程序性的。该方法未在变量或类上执行。您正在向变量或类发送消息,在这种特定情况下,您发送的消息恰好是方法的名称。

标签: objective-c ios cocoa-touch syntax


【解决方案1】:

[CCDirector sharedDirector] 正在获取导演的单例实例。然后你用parameter 调用something 方法。这将类似于这样做

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      Here is more information 在 Objective-c 中的单例模式。

      【讨论】:

        【解决方案4】:

        括号在任何地方的意思都是一样的。消息表达式[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];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-07
          • 1970-01-01
          • 1970-01-01
          • 2019-07-02
          • 1970-01-01
          • 2011-11-12
          • 1970-01-01
          • 2015-03-02
          相关资源
          最近更新 更多