10、Blocks应用-OC

[Blocks是指就是c语音中的函数指针]

Blocks最早是从苹果本地的雪豹,移植到iPhone。官方建议多用blocks,在多线程应用比较广泛

(1)Blocks 是什么

(2)Blocks 和 c语音函数指针的区别

(3)如何调用Blocks

(4)代理2端如何通过Blocks通信



(1)Blocks 是什么

和c语音函数指针类似,运行需要编译器和运行时的支持(ios4.0开始支持 Blocks )

两个对象之间通信,用到Blocks,相当于回调函数。

(2)Blocks 和 c语音函数指针的区别

(3)如何调用Blocks

typedef 定义:


_ _block关键字:

变成一个全局变量


blocs简单用法:

block 申明:

void (^myblocks)(void) =NULL;

block 赋值:

myblocks = ^(void){

NSLog(@"in blocks");

};

block 调用:

myblocks();

例子1:

    int (^myblocks2)(int a, int b) = ^(int a, int b){//赋值

        int c = a+b;

        return c;

    }

    int ret = myblocks2(10,20);//执行

例子2:

__block int sum = 0;//变成全局变量

int (^myblocks3)(int a, int b) = ^(int a, int b){

sum = a+b;

return sum;

}

myblock3(20,30);

例子3:

typedef int (^SumBlockT)(int , int);//定义一个类型

SumBlockT myblocks4 = ^(int a, int b){

NSLog(@"sum: %d", a+b);return 0;

}

myblock4(10,12);



(4)代理2端如何通过Blocks通信

iphone开发用到的blocks:

人中定义一个blocks,狗每次定时调用这个blocks;

狗中定义一个blocks,用来存放人中的定义的blocks函数。

狗:

.h

void (^BarkCallback)(Dog *thisDog, int count);//变量

- (void) setBark:( void(^)(Dog *thisDog, int count))eachBark;//向外暴露这个函数,给人赋值的。

.m

- (void)updatatime:(id)arg

{

if(BarkCallblack)

{

BarkCallback(self, barkCount);

}

}

- (void) setBark:( void(^)(Dog *thisDog, int count))eachBark

{

[BarkCallblack release];

BarkCallblack = [eachBark copy];//copy是因为setDog函数可能被释放。

}

-(void) dealloc

{

[BarkCallblack release];

[super dealloc];

}

人:

setDog函数里面:

[_dog setBark:^(Dog *thisDog, int count){

NSLog(@"person dog %d count %d\n", thisDog.ID, count );

}]






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值