Blocks

作者: 41c48b8df394 | 来源:发表于2019-02-17 11:33 被阅读15次
    高级编程.png

    1.Objective-C 转C++的方法

    写好block的方法,
    在终端cd到当前文件夹下
    输入 clang -rewrite-objc xxx.m 最后在当前文件夹下多一个xxx.cpp后缀的文件

    什么是blocks

    blocks是C语言的扩充功能,可以用一句话来表示block的扩充功能:带有自动变量(局部变量)的匿名函数

    block的实质

    block是带有自动变量值的匿名函数
    block即为Objective-C的对象

    5.代理与block对比
    在有多个消息传递时,用delegate实现更合适,看起来也更清晰。block就不太好了,这个时候block反而不便于维护,而且看起来非常臃肿,很别扭。
    代理更加面相过程,block则更面向结果。
    从设计模式的角度来说,代理更佳面向过程,而block更佳面向结果。例如我们使用NSXMLParserDelegate代理进行XML解析,NSXMLParserDelegate中有很多代理方法,NSXMLParser会不间断调用这些方法将一些转换的参数传递出来,这就是NSXMLParser解析流程,这些通过代理来展现比较合适。而例如一个网络请求回来,就通过success、failure代码块来展示就比较好。
    从性能上来说,block的性能消耗要略大于delegate,因为block会涉及到栈区向堆区拷贝等操作,时间和空间上的消耗都大于代理。而代理只是定义了一个方法列表,在遵守协议对象的objc_protocol_list中添加一个节点,在运行时向遵守协议的对象发送消息即可。

    作者:dozening007
    链接:https://www.jianshu.com/p/bba075b5916e
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:Blocks

          本文链接:https://www.haomeiwen.com/subject/hzuzxqtx.html