类型而不是变量之间的脱字符号,用括号括起来

Posted

技术标签:

【中文标题】类型而不是变量之间的脱字符号,用括号括起来【英文标题】:Caret character between types rather than variables, surrounded by parentheses 【发布时间】:2011-03-06 00:14:50 【问题描述】:

我在浏览 Apple 的文档时看到了类似 (void (^)(void)) 的内容。有人能解释一下这句话是什么意思吗? ^ 是异或,对吧? void XOR void 对我来说没有多大意义?

还有类似(void (^)(BOOL finished))

【问题讨论】:

【参考方案1】:

这些是向 Objective-C 添加匿名函数和函数对象的块。参见例如Introducing Blocks and Grand Central Dispatch :

块对象(非正式地,“块”)是对 C 以及 Objective-C 和 C++ 的扩展,使程序员可以轻松定义自包含的工作单元。块类似于——但比传统的函数指针更强大。主要区别在于:

块可以内联定义为“匿名函数”。 块捕获局部变量的只读副本,类似于其他语言中的“闭包”

声明一个块变量:

void (^my_block)(void);

为它分配一个块对象:

my_block = ^(void) printf("hello world\n"); ;

调用它:

my_block(); // prints “hello world\n”

接受一个块作为参数:

- (void)doSomething:(void (^)(void))block;

将该方法与内联块一起使用:

[obj doSomeThing:^(void) printf("block was called"); ];

【讨论】:

【参考方案2】:

这是一个block,是 Apple 对 C 的特定扩展,类似于函数指针或其他语言中的函数对象。

(void (^)(void)) 看起来像是对不带参数且不返回任何内容的块类型的类型转换。同样,(void (^)(BOOL finished)) 看起来像另一种类型转换,用于具有一个布尔参数且不返回任何内容的块。

【讨论】:

以上是关于类型而不是变量之间的脱字符号,用括号括起来的主要内容,如果未能解决你的问题,请参考以下文章

shell 中的 特殊变量类型数组

生成与解析JSON~简单入门

使用JSONObject生成和解析json

Python-基础知识-数据类型变量和常量

《python编程从入门到实践》变量和简单数据类型

字符与字符串的区别