最近瘋狂的迷上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避免循環(huán)引用的問題
原因:block如果調用了宿主對象則可能發(fā)生循環(huán)引用(即 [self ? ?xxxxxxx] )
避免方法:用__weak或者__unsafe_unretained修飾block