你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 嵌入式&iOS:回調函數(C)與block(OC)回調比照

嵌入式&iOS:回調函數(C)與block(OC)回調比照

編輯:IOS開發綜合

學了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)回調比照】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved