• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Yesi-悦思
"(program(computers) == *art) ? so : what" 修身岂为名传世,作事惟思利及人
博客园    首页    新随笔    联系   管理    订阅  订阅

Block^

Block 封装了一段代码,可以在任何时候执行

Block可以作为函数或者函数的返回值,而其本身又可以带输入参数货返回值。它和传统的函数指针很类似,但是有区别:Block是inline(内联函数)的,并且默认情况下他对局部变量是只读的。

苹果官网建议尽量多用Block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多。

外号  代码段


 

1.blocks 定义

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

return a+b;

}

定义了一个叫MySum的Block对象,它带有两个int参数,返回int,等式右边就是blocks的具体实现。

调用Block

int  a=Sum(10,11);

2.typedef来定义

typedef int (^MySum)(int,int);

void test1(){

MySum sum=^(int a,int b){

return a+b;

};

NSLog(@"%i",sum(10,10));

}

block可以访问外面定义的变量

但是默认情况下block中不能修改

如果要修改就加___block关键字。两个下划线,注意。

typedef int (^MySum)(int,int);

void test1(){

MySum sum=^(int a,int b){

return a+b;

};

NSLog(@"%i",sum(10,10));

}


 

 

 

typedef int (^MySum)(int,int);

void test1(){

__block int c=15;

MySum sum=^(int a,int b){

return a+b;

c=19;

};

NSLog(@"%i",sum(10,10));

}

 


 

建立Button class,使用block做监听器--------------------->回调

Button.h

@class Button;

typedef void (^ButtonBlock) (Button *btn);

@property (nonatomic,assign) ButtonBlock block;

//mimic button is clicked;

-(void)click{

_block(self);

}

Button.m

 

main.m

Button *btn=[[[Button]init]autorelease];

//btn.listener=^(Button *btn){

//NSLog(@"button-%@ is clicked",btn);

//};

btn.block=^(Butten *btn){

NSLog(@"Button -%@ is clicked,",btn);

};

[btn click];

 

 

 


 

posted @ 2015-05-12 17:00  悦思  阅读(154)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3