核心理念
Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。
早期版本和现行版本
Objective-C运行时系统有两个已知版本:早期版本和现行版本。现行版本主要是Objective-C 2.0及与其相关的新特性。
在现行版本中,最显著的新特性就是实例变量是"健壮“(non-fragile)的:
此外,现行版本支持声明property的变量的统一声明。
平台
iPhone程序和Mac OS X v10.5及以后的系统中的64位程序使用的都是Objective-C运行时系统的现行版本。
其它情况(Mac OS X系统中的32位程序)使用的是早期版本。
Objective-C程序有三种途径和运行时系统交互:通过Objective-C源代码;通过Foundation 框架中类NSObject 的方法;通过直接调用运行时系统的函数。
通过类NSObject的方法
Cocoa程序中绝大部分类都是NSObject 类的子类,所以大部分都继承了NSObject 类的方法,因而继承了NSObject 的行为。然而,某些情况下,NSObject 类仅仅定义了完成某件事情的模板,而没有提供所有需要的代码。
例如,NSObject 类定义了description 方法,返回该类内容的字符串表示。这主要是用来调试程序——GDB中的print-object 方法就是直接打印出该方法返回的字符串。NSObject 类中该方法的实现并不知道子类中的内容,所以它只是返回类的名字和对象的地址。NSObject 的子类可以重新实现该方法以提供更多的信息。例如,NSArray 类改写了该方法来返回NSArray 类包含的每个对象的内容。
某些NSObject 的方法只是简单地从运行时系统中获得信息,从而允许对象进行一定程度的自我检查。例如,class 返回对象的类;isKindOfClass: 和isMemberOfClass: 则检查对象是否在指定的类继承体系中;respondsToSelector: 检查对象能否响应指定的消息;conformsToProtocol: 检查对象是否实现了指定协议类的方法;methodForSelector: 则返回指定方法实现的地址。
|
请发表评论