Blocks

2019-02-17  本文已影响15人  41c48b8df394
高级编程.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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

上一篇下一篇

猜你喜欢

热点阅读