C的回調函數: callBack.h 1)、聲明一個doSomeThingCount函數,參數為一個(無返回值,1個int參數的)函數。 callBack.c 1)、在doSomeThingCount函數,對運行次數自增,並調用參數--函數。 main.c 1)、定義一個customdoSomeTh ...
C的回調函數:
callBack.h
1)、聲明一個doSomeThingCount函數,參數為一個(無返回值,1個int參數的)函數。
void DSTCount(void(*CallBack)(int data_i32));
callBack.c
1)、在doSomeThingCount函數,對運行次數自增,並調用參數--函數。
void DSTCount(void(*CallBack)(int data_i32)) { static int numb = 0; numb++; (*CallBack)(numb); }
main.c
1)、定義一個customdoSomeThingCount函數,列印數據。
void customDSTCount(int data_i32) { printf("%d\n",data_i32); }
2)、main函數里,運行 callBack.h 的 DSTCount 函數,參數為main里的customDSTCount函數。
while (1) { DSTCount(customDSTCount); }
OC的Block:
MyButton.h(繼承於UIButton):
1)、定義一個Block的參數數量、類型。
typedef void(^ButtonBlock)(int data_i32);
2)、聲明一個doSomeThingCount函數,帶Block參數。(註意,這裡不需要加*,類用習慣了,參數隨手就加個*)
-(void)DSTCount:(ButtonBlock)myButtonBlockPTR;
MyButton.m(繼承於UIButton):
1)、在doSomeThingCount函數,對運行次數自增,並調用Block參數。
-(void)DSTCount:(ButtonBlock)myButtonBlockPTR { static int numb = 0; numb++; myButtonBlockPTR(numb); }
RootViewControl.m(self.window.rootViewController):
1)、viewDidLoad函數,定義一個(100,100,100,100)、紅色的按鈕實例,按鈕添加事件,把按鈕加到self.view上。
MyButton *tempButton = [[MyButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; tempButton.backgroundColor = [UIColor redColor]; [tempButton addTarget:self action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:tempButton];
2)、按鈕點擊調用,調用MyButton里的DSTCount函數,Block參數直接輸入。
-(void)mybuttonClick:(MyButton*)button { [button DSTCount:^(int data_i32) { printf("%d\n",data_i32); }]; }
圖片補充:
C回調函數:
1)、CallBack.C
2)、CallBack.h
3)、main.c
OC的Block
1)、MyButton.h
2)、MyButton.m
3)、RootViewControl.m
4)、運行