一、先用Xcode創建一個空工程。
(1) block之前先用弄懂c語言的函數指針,看代碼:
typedef int (^SumP)(int,int);//用typedef定義一個block類型
void test()
{
printf("調用了test函數\n");
}
int sum(int a,int b)
{
return a+b;
}
int main(int argc,constchar * argv[])
{
void (*p)();//這是一個函數指針 能夠指向一個返回值爲void 沒有形參的函數
//(*p)是固定寫法,代表指針變量p將來肯定指向函數
//左邊的void:指針變量p指向的函數沒有返回值
//右邊():指針變量p指向的函數沒有形參
p = test;//指針變量p指向test函數
//利用指針變量間接調用取出函數
(*p)();
//也可以
p();
int(*xp)(int,int);//定義一個指向函數的指針返回值是int 函數的參數是int int
xp =sum;
int c = (*xp)(1,2);
printf("c is %d\n",c);
(2) 下面來學習block
/*
作用:
Block封裝了一段代碼,可以在任何時候執行
Block可以作爲函數參數或者函數的返回值,而本身又可以帶輸入參數或返回值
block,在多線程、異步任務,集合遍歷,集合排序、動畫專場用得多
*/
//block用來保存一段代碼
//block的標誌 :^
//block跟函數指針很像
//定義block變量沒有返回值沒有參數
void(^myblock)() = ^ {
NSLog(@"---------");
NSLog(@"---------");
};
//利用block變量調用block內部的代碼
myblock(); //運行block
//定以一個block返回值爲int函數的參數爲int int
int(^sumblock)(int ,int ) = ^(int a,int b){
return a + b;
};
int sum = sumblock(10,11);
NSLog(@"sum = %d",sum);
//利用typedef定義block來創建一個block變量
SumP sumblock1 = ^(int a,int b){
return a - b;
};
int d = sumblock1(10,5);
NSLog(@"d = %d",d);
return 0;
}
二、打印結果。
調用了test函數
調用了test函數
c is 3
2014-04-17 23:02:30.926 block的簡單使用[530:303] ---------
2014-04-17 23:02:30.931 block的簡單使用[530:303] ---------
2014-04-17 23:02:30.932 block的簡單使用[530:303] sum = 21
2014-04-17 23:02:30.932 block的簡單使用[530:303] d = 5
Program ended with exit code: 0
原文地址:http://blog.csdn.net/itpeng523/article/details/23965147