嵌入式&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)、運行