block
2015-05-15 本文已影响940人
candy_r
最近疯狂的迷上block,纪录一下初步使用block的情形。
1.先看一个最简单的例子,网上很多类似的:
int(^addBlock)(int,int)= ^(int a ,int b){
return a+b;
};
第一个int:block的返回值
^:表示这是一个block
addBlock:block的名称
(int,int):参数
所以block的定义就是:返回值(^block的名字)(参数列表)=^(参数列表){代码段}
2.下面定义一个block用于传值:
typedef void(^BoardNotifyBlock)(CGFloatboardHeight);
@property(nonatomic,strong) BoardNotifyBlock boardNootifyBlock;
调用:
self.boardNootifyBlock(endKeySwap.size.height);
[cell3 setBoardNootifyBlock:^(CGFloatboardHeight){
}];
3.block与delegate
block一般用于异步和回传(即callback),像是网络请求回调,甚至一些UI的变化用 block都是很方便的,在这些情况下就可以抛弃delegate了
当然这并不等于完全抛弃delegate,对此,念茜女神说过一段话,深表赞同:
4.关于block避免循环引用的问题
原因:block如果调用了宿主对象则可能发生循环引用(即 [self xxxxxxx] )
避免方法:用__weak或者__unsafe_unretained修饰block