iOS开发之运行时编程(Runtime Programming)浅读
2016-01-24 14:35
288 查看
什么是运行时(Objective-C runtime)?
简单的来说,Objective-C runtime是一个实现 Objective-C语言的库。对象可以用C语言的结构体表示,而方法(methods) 可以用C函数实现。
事实上,他们也差不多是这么做的,然后加上一些额外的特性。这些结构体和函数封装后,Objective-C程序员可以在程序运行时创建、检查、
修改类,对象和他们的方法。
除了封装,Objective-C runtime库也负责找出方法的最终执行代码。当程序执行 [object doSomething]时,不会直接找到方法并调用。相反,一
条消息(message)会发送给对象。runtime库会让对象根据消息决定该做出什么样的反应。所以,消息传递(message - passing)是Smalltalk(
Objective-C 根据Smalltalk发展而来)最重要的部分,而不是对象。“消息命令(messaging)” ,是Smalltallk的核心内容。制造一个庞大且可扩展系统的关
键是设计它各个模块之间的通信方式,而不是关注它的内部属性和行为。
很多文章中使用Object runtime这个词,看似只有一个,实际上存在很多的runtime库。虽然它们都支持对象的自省检查和消息接受,但是它们却有不同的
特性和实现方式(同样是发送消息,Apple的runtime用一步完成,而GNU runtime会先查询这些消息,然后执行查到的函数分两步完成)。
运行时学习路程
1、动态的添加对象的成员变量和方法
Ivar
: 成员变量
class_copyIvarList : 遍历某个类所有的成员变量
为类别添加成员变量
为类动态添加方法(//self和_cmd是必须的,在之后可以随意添加其他参数 )
为类交换方法
Objective-C runtime可以有效的帮助我们为程序增加很多动态的行为。一些开发者除了使用method swizzling帮助调试程序,并不会在实际程序中使用它,但runtime编程的确有很多功能,它应该成为实际应用代码编写的重要工具。
简单的来说,Objective-C runtime是一个实现 Objective-C语言的库。对象可以用C语言的结构体表示,而方法(methods) 可以用C函数实现。
事实上,他们也差不多是这么做的,然后加上一些额外的特性。这些结构体和函数封装后,Objective-C程序员可以在程序运行时创建、检查、
修改类,对象和他们的方法。
除了封装,Objective-C runtime库也负责找出方法的最终执行代码。当程序执行 [object doSomething]时,不会直接找到方法并调用。相反,一
条消息(message)会发送给对象。runtime库会让对象根据消息决定该做出什么样的反应。所以,消息传递(message - passing)是Smalltalk(
Objective-C 根据Smalltalk发展而来)最重要的部分,而不是对象。“消息命令(messaging)” ,是Smalltallk的核心内容。制造一个庞大且可扩展系统的关
键是设计它各个模块之间的通信方式,而不是关注它的内部属性和行为。
很多文章中使用Object runtime这个词,看似只有一个,实际上存在很多的runtime库。虽然它们都支持对象的自省检查和消息接受,但是它们却有不同的
特性和实现方式(同样是发送消息,Apple的runtime用一步完成,而GNU runtime会先查询这些消息,然后执行查到的函数分两步完成)。
运行时学习路程
1、动态的添加对象的成员变量和方法
Ivar
: 成员变量
class_copyIvarList : 遍历某个类所有的成员变量
为类别添加成员变量
为类动态添加方法(//self和_cmd是必须的,在之后可以随意添加其他参数 )
为类交换方法
Objective-C runtime可以有效的帮助我们为程序增加很多动态的行为。一些开发者除了使用method swizzling帮助调试程序,并不会在实际程序中使用它,但runtime编程的确有很多功能,它应该成为实际应用代码编写的重要工具。