嵌入式&iOS:回調函數(C)與block(OC)傳 參/函數 對比


嵌入式&iOS:回調函數(C)與block(OC)傳 參/函數 對比

C的回調函數:

callBack.h

1)、聲明一個doSomeThingCount函數,參數為一個(無返回值,1個int參數的)函數。

1
void DSTCount( void (*CallBack)( int data_i32));

 

callBack.c

1)、在doSomeThingCount函數,對運行次數自增,並調用參數--函數。

1
2
3
4
5
6
void DSTCount( void (*CallBack)( int data_i32))
{
     static int numb = 0;
     numb++;
     (*CallBack)(numb);
}

 

main.c

1)、定義一個customdoSomeThingCount函數,打印數據。

1
2
3
4
void customDSTCount( int data_i32)
{
     printf( "%d\n" ,data_i32);
}

2)、main函數里,運行 callBack.h 的 DSTCount 函數,參數為main里的customDSTCount函數。

1
2
3
4
while (1)
{
     DSTCount(customDSTCount);
}

 

 

 

OC的Block:

MyButton.h(繼承於UIButton):

1)、定義一個Block的參數數量、類型。

1
typedef void (^ButtonBlock)( int data_i32);

2)、聲明一個doSomeThingCount函數,帶Block參數。(注意,這里不需要加*,類用習慣了,參數隨手就加個*)

1
-( void )DSTCount:(ButtonBlock)myButtonBlockPTR;

 

MyButton.m(繼承於UIButton):

1)、在doSomeThingCount函數,對運行次數自增,並調用Block參數。

1
2
3
4
5
6
-( void )DSTCount:(ButtonBlock)myButtonBlockPTR
{
     static int numb = 0;
     numb++;
     myButtonBlockPTR(numb);
}

 

RootViewControl.m(self.window.rootViewController):

1)、viewDidLoad函數,定義一個(100,100,100,100)、紅色的按鈕實例,按鈕添加事件,把按鈕加到self.view上。

1
2
3
4
5
6
7
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參數直接輸入。

1
2
3
4
5
6
-( 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)、運行

標簽: 嵌入式, iOS開發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM