Objective c 块声明的结构
当声明Objective c 块声明的结构,objective-c,objective-c-blocks,Objective C,Objective C Blocks,当声明块时使用此语法背后的基本原理是什么(即左方括号和插入符号) 例如: int (^myBlock)(int) = ^(int num) { return num * multiplier; }; C块:语法和用法 指向块的变量采用与指向函数的变量完全相同的语法,除了*替换为^。例如,这是一个函数指针,指向接受int并返回float的函数: float (*myfuncptr)(int); float (^myblockptr)(int); 这是一个块指针,指向一个接受int并返
块时
使用此语法背后的基本原理是什么(即左方括号和插入符号)
例如:
int (^myBlock)(int) = ^(int num) {
return num * multiplier;
};
C块:语法和用法 指向块的变量采用与指向函数的变量完全相同的语法,除了*替换为^。例如,这是一个函数指针,指向接受int并返回float的函数:
float (*myfuncptr)(int);
float (^myblockptr)(int);
这是一个块指针,指向一个接受int并返回float的块:
float (*myfuncptr)(int);
float (^myblockptr)(int);
与函数指针一样,您可能需要对这些类型进行typedef,否则它可能会变得比较复杂。例如,指向返回块并获取块的块的指针类似于void(^(^myblockptr)(void(^)())()代码>,几乎无法读取。稍后会有一个简单的typedef,它更简单:
typedef void (^Block)();
Block (^myblockptr)(Block);
声明块本身是我们进入未知领域的地方,因为它实际上不像C,尽管它们类似于函数声明。让我们从基础开始:
myvar1 = ^ returntype (type arg1, type arg2, and so on) {
block contents;
like in a function;
return returnvalue;
};
这定义了一个块文字(from after=to,include}),显式地提到它的返回类型、参数列表、块体、返回语句,并将该文字赋给变量myvar1
文本是可以在编译时生成的值。整数文本(int a=3;中的3)和字符串文本(const char*b=“foobar”;)中的“foobar”)是文本的其他示例。块声明是文本这一事实在以后进入内存管理时很重要
在这样的块中查找return语句对某些人来说很麻烦。您可能会问,它是否从封闭函数返回?否,它返回一个可由块的调用者使用的值。请参阅“调用块”。注意:如果块有多个return语句,它们必须返回相同的类型
最后,块声明的某些部分是可选的。这些是:
- 参数列表。如果块不接受参数,则可以完全跳过参数列表李>
示例:
myblock1 = ^ int (void) { return 3; }; // may be written as:
myblock2 = ^ int { return 3; }
myblock3 = ^ void { printf("Hello.\n"); }; // may be written as:
myblock4 = ^ { printf("Hello.\n"); };
// Both succeed ONLY if myblock5 and myblock6 are of type int(^)(void)
myblock5 = ^ int { return 3; }; // can be written as:
myblock6 = ^ { return 3; };
- 返回类型。如果块没有返回语句,则假定为void。如果块具有return语句,则从该语句推断返回类型。这意味着您几乎总是可以从声明中跳过返回类型,除非它可能不明确李>
示例:
myblock1 = ^ int (void) { return 3; }; // may be written as:
myblock2 = ^ int { return 3; }
myblock3 = ^ void { printf("Hello.\n"); }; // may be written as:
myblock4 = ^ { printf("Hello.\n"); };
// Both succeed ONLY if myblock5 and myblock6 are of type int(^)(void)
myblock5 = ^ int { return 3; }; // can be written as:
myblock6 = ^ { return 3; };
来源:我认为基本原理是它看起来像一个函数指针:
void (*foo)(int);
这应该是所有C程序员都熟悉的。是的,但没有什么可疑之处,我也发布了源代码。但我必须重新格式化整个答案