runtime与block的实现原理.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
runtime与block的实现原理 Runtime和Block是一种基于Objective-C语言提供的一些动态特性,它们都是运行时新增加的特性,为了更好的改变Object-C对象模型,从而将原来不可能实现的事情变成可行的并且使程序变得更加灵活和动态。本文将简要介绍Runtime与Block,以及它们实现的原理。 Runtime Runtime是运行时,它可以动态的管理并影响Object-C对象模型。Runtime的功能强大,它可以在不使用任何资源的情况下完成一系列的操作,比如动态调用对象方法,动态添加对象属性,以及动态注册类等。这些功能实际上都是通过Runtime本身提供的一些C语言函数来实现的。 Runtime 原理: Runtime的实现机理是通过runtime维护一个全局的“映射表”来实现的,这个“映射表”中主要包括了一些key-value的索引表,比如在NSObject的子类中,key为类的名称,value为类的实现对象,这样对于对象的实例化和对象的消息传递都可以利用runtime维护的映射表直接进行查找获取相关的Objective-C的实例对象或者消息,而无需再去动态加载类然后进行类的初始化。 Block Block是一个可以将函数或者表达式封装成对象得到一段代码指针,可以参数传入或返回值,从而支持异步编程,即可在一段代码需要异步回调时使用以及可以捕获本地变量,从而进行函数参数传递,Block能够实现更为简便的函数或者方法调用,以及更加轻巧的编码方式。 Block原理: Block的实现机理也是复杂的,它的实现主要基于LLVM的编译器的技术,也可以说Block的实现主要依赖于编译器的技术,这里要介绍一下Block其中用到的两个技术: 1.closures:可以说closures时Block的核心技术,它允许一段代码接受一个或者多个参数以及返回值,与普通函数不同的是它会捕获任何调用它的代码以及表达式中所包含的变量,因此不需要定义任何全局变量,这种技术让函数实现更简洁,从而实现异步编程中代码的简洁执行。 2.autoinline:autoinline非常轻巧但是非常强大,它可以在表达式中自动插入一段程序,用于添加或实现Block的功能,autoinline可以和closures一起使用以更容易实现Block,因此runtime也是基于autoinline技术实现Block的。 总而言之,Runtime与Block都是Object-C语言提供的一些新增动态特性,Runtime是通过全局维护的一些索引表来实现对象的实例化和消息传递等功能,而Block则是基于LLVM编译器技术中的closures以及autoinline技术实现的,它可以捕获本地变量,以及实现异步编程,使得函数的实现更为简单。

文档评论(0)

软件开发 + 关注
官方认证
服务提供商

十余年的软件行业耕耘,可承接各类需求

认证主体深圳鼎云文化有限公司
IP属地陕西
统一社会信用代码/组织机构代码
91440300MA5G24KH9F

1亿VIP精品文档

相关文档