(^)的目的在iOS中签名

时间:2012-11-21 05:08:17

标签: iphone objective-c ios ipad cocoa

我在许多iOS标题中都看到过(^)被使用了,而且我从来没有遇到过使用该标志的原因。有人可能想开导这个吗?

感谢。

4 个答案:

答案 0 :(得分:10)

那些经常表示“块”。请参阅Blocks Programming Topics

或者,如果您观看WWDC 2012 session 712的开头,他们还会带您一览历史背景。

答案 1 :(得分:4)

它表示一个块。块是一种语法,允许您创建回调函数,并将其作为参数传递给方法。在其他语言中,这类似于闭包,lambda或匿名类。

例如列出的参数: void(^)(NSString *myStr) 期望你传入一个返回void的块/函数,并接受一个NSString指针。

您可以使用以下语法基于方法中声明的预期参数创建块:

^(<Parameters>) { <Body> } 

例如,期望块参数的方法可能如下所示:

-(void)doSomething:(void(^)(NSString *myStr))theBlock;

......可以像这样调用:

[self doSomething:^(NSString *myStr) { NSLog(@"The String is: %@", myStr); }];

您的块将从doSomething:回调,就像一个函数一样,使用参数名称:

-(void)doSomething:(void(^)(NSString *myStr))theBlock {
  theBlock(@"Hello!");
}

...会显示:

The String is: Hello!

答案 2 :(得分:2)

^字符用于块,特别是块参数。

答案 3 :(得分:1)

如果你问为什么字符'^'在块中使用,那是因为剩下的字符相对较少:

  1. 适用于所有典型的键盘。
  2. 可以使用 - 即在语言中不是很重要并且会发生冲突。
  3. 别看傻。
  4. 实际上它缩小到只有两三个,而那些'^'被选中了,因为,好吧,因为。

    如果您想详细讨论讨论,可能会在llvm.org邮件列表等上有此记录。

    你还可以看看关于lambdas的C ++ 11委员会会议的会议记录,这些会议基本上都是一样的。