block

最近瘋狂的迷上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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容