iOS Block 应用浅析

Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block can therefore maintain a set of state (data) that it can use to impact behavior when executed.

You can use blocks to compose function expressions that can be passed to API, optionally stored, and used by multiple threads. Blocks are particularly useful as a callback because the block carries both the code to be executed on callback and the data needed during that execution.


Block的声明与使用:

Block -- 使用场景1(扯蛋):

项目经理:

    狗蛋,把前台MM的照骗美化一下:{要求1:美白,要求2:去黑眼圈,要求3:瘦脸,要求4:凸显身材}

程序员狗蛋:

    我是程序员,不干设计师的活,我不会,你行你上,不行别废话

项目经理:

     我上就我上,然后不想跟狗蛋说话,并丢给狗蛋一个脚本

程序员狗蛋:

    双击脚本,美化完成

项目经理:

    狗蛋给我倒杯水{1:过来拿杯子,2:到旁边接水,3:拿回来双手递给我}

程序员狗蛋:

    执行倒杯水

block 的一个使用场景,把block当做参数传递,流程简写代码:

程序员:

@interface Developer

    - (void)doSomething:(^)()function; //定义

@end

@implementation Developer

- (void)doSomething:(^)()function{  //实现

 function();

}

@end

经理:

Developer *goudan = [[Developer alloc] init]; //初始化

[goudan doSomething :^(){ //调用

    //do 美白

    //do 去黑眼圈

    //do 瘦脸.......

}];

[goudan  doSomething :^(){ //1:过来拿杯子,2:到旁边接水,3:拿回来双手递给我 }];

简析:block 可以简单的理解为一个函数集,可以当作一个参数/返回值传递

you can use blocks to compose function expressions that can be passed to API

Block -- 使用场景2(扯蛋):

卓越的程序员狗蛋学会了美工的全部技能

项目经理:

    狗蛋,把前台MM的照骗美化一下:{要求1:美白,要求2:去黑眼圈,要求3:瘦脸,要求4:凸显身材}

卓越的程序员狗蛋 :

    拿到照骗开始美化。。。。。

    经理你要美多白?脸要瘦到什么样?.......

项目经理:

     少废话,这个往左一点点,哎不对,往右两个像素,哎不对,向下,对向下,这个颜色换成色彩斑斓的黑

    10年过后。。。。。

卓越的程序员狗蛋:

    经理,我也不知道色彩斑斓的黑是什么样,而且我还有别的任务,等不了你扯那么长时间,我给你个方法,你自己填写参数吧

这种情况程序员的api的写法:

@interface Developer

    - ((^)(UIColor *color ))LandscapingPhotos:(UIImage*)image; //定义

@end

@implementation Developer

- ( (^)( UIColor *color ) )LandscapingPhotos:(UIImage*)image{

    //执行一系列的美化操作。。。。。。

     return   ^( UIColor *color ){

        if ( color ){

            //经理给了我一个色彩斑斓的黑,我直接用这个值就好了

            //颜色调整

        }

    };

}

经理

Developer *SuperGoudan= [[Developer alloc] init]; //初始化

id bfun = [SuperGoudan LandscapingPhotos:照骗];

bfun([UIColor “色彩斑斓的黑”]);//想怎么玩就怎么玩,怎么开心怎么玩


以上为Block 作为返回值的用法。。。


待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小笔记 ①用便利贴写下您在教导和培养下属遇到的困难和挑战? (一个贴只能写一个困难或挑战) ③三人成一个小组,一个...
    kissrain_b2ef阅读 268评论 0 0
  • 有一些人,有一些事,尽管你万般无奈,千般不舍;尽管你肝肠寸断,泪飞如雨;尽管你知道,一旦放手后,彼此就会湮灭于茫茫...
    changruifeng别闹阅读 451评论 0 0
  • 再爱也只能是朋友了,没有缘分就到此为止。过好自己剩下的那么多那么多天,那么多年。爱自己比爱谁都值得。 晚安~
    颜儿志夏阅读 121评论 0 1
  • ☞周二.晚上.吵架 下午上完第一节内科,大泡从第二排走向第七排,“二泡,你坐我位子上吧,亮亮有事去一趟市里,我不想...
    L勤劳阅读 561评论 3 4