oc011---block

  • block的介紹
    Block封裝了一段代碼,可以在任何時候執行
    Block可以作爲函數參數或者函數的返回值,而其本身又可以帶輸入參數或返回值。
    蘋果官方建議儘量多用block。在多線程、異步任務、集合遍歷、集合排序、動畫轉場用的很多
Blocks的定義:
int (^MySum)(int, int) = ^(int a, int b) {
    return a+b;
};
定義了一個叫MySum的blocks對象,它帶有兩個int參數,返回int。等式右邊就是blocks的具體實現
Block可以訪問局部變量,但是不能修改。
int sum = 10;
int (^MyBlock)(int) = ^(int num) {
    sum++;//編譯報錯
    return num * sum;
};
如果要修改就要加關鍵字:__block
__block int sum = 10;
  • block 與函數指針的對比
//定義函數指針
int (*myFn)();
//定義Blocks
int (^MyBlocks)(int,int);

//調用函數指針
(*myFn)(10, 20);
//調用Blocks
MyBlocks(10, 20);
  • block的賦值
//在聲明的同時定義變量,然後賦值
int (^MySum)(int,int) = ^(int a,int b) {
    return a + b;
};
//也可先用typedef先聲明類型,再定義變量進行賦值
typedef int (^MySum)(int,int);
MySum sum = ^(int a,int b) {
    return a + b;
}; 

參考一下以爲大神總結的關於block的使用注意事項,總結的很好,另外博客上還有附有一些參考網站和工具網站,博客地址如下:
http://www.cnblogs.com/biosli/p/block_usage.html

發佈了53 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章