1. 相对于C/C++, Objective C尽可能地把一些动作推迟到运行时来执行。即尽可能动态地来做事情。 因此它不仅需要一个编译器,还需要一个运行时环境来执行编译后的代码。
2.Runtime分为Legacy和modern两个版本,一般来说,我们现在用的都是modern版本。
3.modern版本的一个显著特征就是“non-fraigle”, 即父类的成员变量发生改变时,子类不需要重新编译。
4.ObjC与runtime System在三个不同的层次进行交互:(1)通过ObjC源码 (2)通过NSObject定义的函数 (3)通过直接调用runtime functions。
5.Cocoa中大多数类都是NSObject的子类(NSProxy除外)。因此,在这个继承体系中,子类可以根据需求重新实现NSObject定义的一些函数,实现多态和动态性。比如description。
6.自省(introspection)
- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
- (void)doesNotRecognizeSelector:(SEL)aSelector;
7.Runtime System 是一个动态共享库,位于 /usr/include/objc, 拥有一套公共的接口。由一系列函数和数据结构组成。开发人员可用纯C来调用一些函数来做编译器做的事情。或者扩展Runtime System。为开发环境制作一些工具等。
8. 发消息是ObjC程序中最经常出现的表达式,而该表达式最终会被转化为objC_msgSend函数调用。
比如 [receiver message] <-> objc_msg