嵌入式&iOS:回呼函數(C)與block(OC)回調對比,嵌入式培訓

來源:互聯網
上載者:User

嵌入式&iOS:回呼函數(C)與block(OC)回調對比,嵌入式培訓

學了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)、運行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.