设为首页 加入收藏

TOP

10、Blocks应用-OC
2014-11-23 21:12:01 来源: 作者: 【 】 浏览:24
Tags: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 );

}]






】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇I/O多路复用之select总结 下一篇Objective-C 关于静态方法与实例..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: