1.block使用符号“^”表示,例如:
int (^myBlock)(int a){
//块的实现代码
};
此block块名称为myBlock,参数是int型的a,并返回int变量。
2.可以为常用的块创建typedef
如果定义一个块
typedefint (^myBlock)(int a) ;则系统多了一个myBlock类型.
3.尽量避免在if,else语句中分别定义2个块,如:
void(^block)();
if(//)
{
block = ^{
NSLog(@"Block A");
};
}
else
{
block = ^{
NSLog(@"Block B");};
}
block =[ ^{
NSLog(@"Block A");
} copy];这样栈内存就不会自动回收。
4.块引用对象出现保留环的问题
假设在MyViewController *_myViewCtrl;
定义NSData *_fetchData;
_myViewCtrl = [[MyViewController alloc]init]
[_myViewCtrl startCompletiobHandle:^(NSData *data)
{
_fetchData = data;
}];
上述代码是错误的,块保留了类的实例_myViewCtrl,而对象又保留了块,从而出现保留环。
应该进行如下修改:
MyViewController *_myViewCtrl = [[MyViewController alloc]init];
[_myViewCtrl startCompletiobHandle:^(NSData *data)
{
_fetchData = data;
}];