Block语法基础

来源:互联网 发布:115个java面试题和答案 编辑:程序博客网 时间:2024/05/16 19:53

 

 Block的应用场景

 

 对象与对象之间的通信方式

 

 1.代理-协议   11

 2.通知        1对多

 3.Block       1但不需要协议

 

 三种通信方式都实现了对象之间的解耦合。

 

 通知的通信方式是1对多;  代理、block11

 

 

 Block介绍

 

 BlockiOS4.0之后新增的一种语法结构,也称为闭包(closure)”

 SDK4.0新增的API大量使用了Block

 Block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象。

 

    //Block的声明

    //返回值  block变量   参数

    int     (^ myBlocks)(int);

    

    //Block的创建

    myBlocks= ^(int a){

        int result = a * a;

        return result;

    };

    

    //Block的调用

    int ret = myBlocks(10);


 

 Blocks和变量

 

 变量按作用域分有全局变量和局部变量。

 block代码块内可以引用这两种变量,但是有不同的管理机制。

 


 引用局部变量

 

 block引用局部变量时,该变量会作为常量编码到block块中。

 局部变量需要使用__block修饰,才能在block块中修改。


Block的内存管理


 1. block里面引用一个局部的Objective-C对象的时候,该对象会被 retain

 如果局部变量使用__block修饰,则不会被retain

 

 2. block里面引用一个实例变量时,该实例对象会被 retain



 block本身可以像对象一样copyrelease

 

 block创建后内存是分配在栈上,调用copy方法,会将block从栈移到推上。

 

 block声明为全局变量时,我们应该调用blockcopy方法。

 

 两种copy方式

 [_block copy];

 Block_copy(_block);

 

 两种release.方式

 [_block release];

 Block_release(_block);

 

    Blocks的应用

    

    UIButton按钮的点击事件响应方法,改成block

    

    1.SDK提供的事件绑定

    

  

  [button addTarget:self action:@selector(clickAction:)

     forControlEvents:UIControlEventTouchUpInside];

    

    2.block.方式

    

    button.touchBlock = ^(UIButton *button) {

        NSLog(@"按钮被点击了");

    };

    

    好处是不需要重新定义方法




 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 停车被城管贴条怎么办 违停告知单丢了怎么办 交通事故责任认定书不服怎么办 对交通事故认定书有异议怎么办 老婆不让我碰她怎么办 车被城管拖走了怎么办 共享汽车没油了怎么办 车被蹭了人跑了怎么办 遇见碰瓷的人怎么办 遇到老人碰瓷的怎么办 打了碰瓷的怎么办 倒车入库打晚了怎么办 上班停车费太贵怎么办 黄疸回家小孩不爱吃母乳怎么办 黄金棒开关坏了怎么办 在一家莆田系医院上班怎么办 被莆田医院骗了怎么办 痘痘红肿有脓包怎么办 换届选举候选人自动退出竞选怎么办 城管暴力执法导致老百姓受伤怎么办 领导制定方案与政策不一致怎么办 第三方支付存在的金融风险怎么办 貔貅鼻子摔坏了怎么办 貔貅鼻子磕破了怎么办 红警2游戏出错怎么办 猛犸牙上油花了怎么办 吃了细菌的食物怎么办 易拉罐罐头拉环断了怎么办 衣服上有火锅味怎么办 衣服沾上火锅味怎么办 做杨梅罐头里面好多小白虫怎么办 一地两检手续怎么办 剩米饭变干硬了怎么办 吃剩的米饭变硬怎么办 误食发热包的水怎么办 玻璃饭盒加热后盖子打不开怎么办 玻璃饭盒盖子被吸住了怎么办 微波炉加热饭盒盖子打不开怎么办 铁饭盒盖子打不开了怎么办 塑料玻璃饭盒打不开了怎么办 方便火锅没有发热包怎么办