// 1.函數指針專門用來指向C語言的函數的指針(專門用來存儲函數名的地址)函數
// 2.選擇器是用來存儲OC中方法,(存的也是方法名)spa
// 3.block也是專門用來存儲方法 (存的是函數體-實現函數功能的代碼段).net
//指針
#import <Foundation/Foundation.h>code
void func1(){orm
NSLog(@"函數1");get
}it
int main(int argc, const char * argv[]) {io
@autoreleasepool {class
//===========1.回顧函數指針========
// 返回值類型(*函數指針名)(參數列表)
//聲明一個能夠指向返回值是空,沒有參數的函數的函數指針
void (*pfunc)() = func1;
//用這個函數指針存儲函數地址
pfunc = func1;
//經過函數指針調用函數
pfunc();
//函數指針的做用:將函數做爲參數來傳遞
//=========2.block基礎============
//"block"和"指針"同樣,只是對一種類型的描述;經過表達式前面"*"來判斷表達式是指針。咱們是經過表達式前面的"^"來判斷表達式是block。指針專門用來存儲地址,block專門用來存儲代碼塊。
//block存儲代碼塊的方式和函數指針存儲函數的方式很像。
//想要存儲什麼樣的函數的代碼塊,你就須要聲明什麼樣的block去存儲
//a.block的聲明
//返回值類型 (^block變量名)(參數列表);
void (^block1)(); //聲明瞭一個block變量block1;這個block變量可以存儲是沒有返回值,沒有參數的函數的函數體
//b.block的初始化
//返回值類型 (^block變量名)(參數列表) = ^(參數列表){函數體};
void (^block2)() = ^(){
//寫函數功能的實現的代碼段(函數體)
NSLog(@"這個一個代碼段");
};
//c.賦值
block1 = ^(){
NSLog(@"這第二個代碼段");
};
//d.block的調用
//block中存儲的代碼段,在調用block調用的時候纔會執行
//block調用和C語言的函數調用同樣
block1();
block2();
}
return 0;
}