返回值(^block变量名)(形参列表) = ^( 形参列表){
};
void (^sunBlock)();
sunBlock = ^{
NSLog(@"sunBlock");
};
sunBlock();
void(^sunBlock)(int,int);
sunBlock = ^(int value1,int value2){
NSLog(@"%d",value1 + value2);
};
sunBlock(10,20);
int (^sunBlock)(int,int);
sunBlock = ^(int value1,int value2){
return value1 + value2;
};
NSLog(@"%d",sunBlock(10,20));
块对象内存布局
在块对象的内存区域中
全局的静态 block:NSConcreteGlobalBlock,不会访问任何外部变量。 栈中的 block:NSConcreteStackBlock,当函数返回时会被销毁。 堆中的 block:NSConcreteMallocBlock,当引用计数为 0 时会被销毁。
void (^testGlobalBlock)() = ^{
NSLog(@"hello block");
};
int main(int argc, const char * argv[]) {
testGlobalBlock();
return 0;
}
int main(int argc, const char * argv[]) {
void (^testStackBlock)() = ^{
NSLog(@"hello block");
};
testStackBlock();
return 0;
}
int main(int argc, const char * argv[]) {
void (^testStackBlock)() = [^{
NSLog(@"hello block");
} copy];
testStackBlock();
return 0;
}