OC 重點block-------3-------block如何作為函式的引數
首先說下
簡化block變數的複雜定義
1)。typefy :講一個長型別定義為一個短型別
2)。我們可以用typedef 講長型別的block型別,定義為一個短型別
typedef void (^newType)(); 是一個block 型別,無引數無返回值的型別
typedefvoid (^newType)();
// 代表重新定義一個型別叫做newType
newType block1;
newType block2;
typedefint(^newType2)(int num1,int num2);
newType2
int num3 = num2+num1;
return num3;
};
int num = block3(10,30);
NSLog(@"----%d",num);
---------------------block如何作為函式的引數
1.block是一個數據型別,所以可能可以作為引數
2.如何位函式定義block型別的引數:a.就是小括號中宣告一個指定的block變數的就可以了,b.可以使用typedef簡化定義,這樣就簡易了些
3,如何呼叫帶block的引數呢?要求呼叫的時候,那麼要呼叫的時候傳入一個和形參
呼叫的時候,可以先將程式碼段,儲存到一個block變數中,然後傳遞這個block變數,也可以直接講符合要求的程式碼段寫到小括號裡
4.將block作為函式的引數可以實現什麼效果:可以將呼叫者自己寫的1段程式碼,傳遞到函式的內部區去執行.
*/
#import <Foundation/Foundation.h>
typedefvoid (^newType)();
//為函式定義一個引數,定義個block型別的引數
//無引數無返回值,
//void test(void (^myBlock1)())
void test(newType block1)
{
NSLog(@"~~~~~~~");
block1();
NSLog(@"~~~~~~~~");
}
void test2 (int (^jiafaBlock)(int num1,int num2))
{
NSLog(@"~~~~~~~");
int sum = jiafaBlock(100,200);
NSLog(@"=====%d",sum);
NSLog(@"~~~~~~~~");
}
int main(int argc, constchar * argv[]) {
newType type = ^{
NSLog(@"哈哈");
NSLog(@"呵呵");
NSLog(@"嘿嘿");
};
test(type);
test2(^int(int num1, int num2) {
return num1 +num2;
});
// 呼叫的時候,可以先將程式碼段,儲存到一個block變數中,然後傳遞這個block變數,也可以直接講符合要求的程式碼段寫到小括號中傳遞
// test(^{
// NSLog(@"哈哈");
// NSLog(@"呵呵");
// NSLog(@"嘿嘿");
// }
// );
return0;
}
test呼叫block的時候,圖片如下