學了OC的block,再寫C的回調函數有點別扭,比照下區別,回想記載下。
C的回調函數:
callBack.h
1)、定義一個回調函數的參數數量、類型。
typedef void (*CallBack)(int data_i32);
2)、聲明一個內部函數指針。
extern CallBack myCallBackPTR;
3)、聲明一個DosomeThingCount函數
void DSTCount(void);
callBack.c
1)、定義一個函數指針
CallBack myCallBackPTR;
2、在DosomeThingCount函數,對運轉次數自增,並調用函數指針
void DSTCount(void) { static int numb = 0; numb++; (*myCallBackPTR)(numb); }
main.c
1)、定義一個customDosomeThingCount函數,打印數據
void customDSTCount(int data_i32) { printf("%d\n",data_i32); }
2)、main函數裡,把callBack.h的函數指針指向main的 customDSTCount,運轉 callBack.h 的 DSTCount 函數
myCallBackPTR = customDSTCount; while (1) { DSTCount(); }
優點:1、不必修正callBack的文件,經過main或其他文件就可以對callBack文件停止修正、補充。
用處:1、如,一個溫度傳感器外設.c,.h都寫好了,不想他人修正它,設成只讀,經過設置回調函數指針,依據需求設置濾波方式,或權值濾波、或均勻值濾波。
補充:1、回調函數在UCOS裡,仿佛叫鉤子(hooks)函數,是不是完全同等,後續再補充吧。
OC的Block:
MyButton.h(承繼於UIButton):
1)、定義一個Block的參數數量、類型。(根本類似,c是*,oc是^)
typedef void(^ButtonBlock)(int data_i32);
2)、聲明、定義一個Block變量。(根本類似)
@property (nonatomic,strong) ButtonBlock myButtonBlockPTR;
3)、聲明一個doSomeThingCount函數。(根本類似)
-(void)DSTCount;
MyButton.m(承繼於UIButton):
1)、在doSomeThingCount函數,對運轉次數自增,並調用Block變量。(根本類似,C是(*xx)(yy),OC是xx(yy) )
-(void)DSTCount { static int numb = 0; numb++; _myButtonBlockPTR(numb); }
RootViewControl.m(self.Window.rootViewController):
1)、viewDidLoad函數,定義一個(100,100,100,100)、白色的按鈕實例,按鈕的Block裡編寫,打印次數,按鈕添加事情,把按鈕加到self.view上
MyButton *tempButton = [[MyButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; tempButton.backgroundColor = [UIColor redColor]; tempButton.myButtonBlockPTR = ^(int data_i32){ printf("%d\n",data_i32); }; [tempButton addTarget:self action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:tempButton];
2、按鈕點擊調用,調用MyButton裡的DSTCount函數
-(void)mybuttonClick:(MyButton*)button { [button DSTCount]; }
比照:Block的完成,在設置變量時,在括號內編寫,不是指向函數。
C的回調函數,只是指針,得指向函數。
補充:僅與C的回調函數比照,Block用途更廣。
圖片補充:
C回調函數:
1)、CallBack.C
2)、CallBack.h
3)、main.c
OC的Block
1)、MyButton.h
2)、MyButton.m
3)、RootViewControl.m
4)、運轉
【嵌入式&iOS:回調函數(C)與block(OC)回調比照】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!