一、动态特性
1、OC可以再运行时替换方法
a、引入头文件
#import <objc/runtime.h>
class_replaceMethod([Kittyclass], @selector(print),myPrint, NULL);
2、在Objective-C中,消息是通过objc_msgSend()这个runtime方法及相近的方法来实现的。这个方法需要一个target,selector,还有一些参数。理论上来说,编译器只是把消息分发变成objc_msgSend来执行。比如下面这两行代码是等价的。(对象k调用print方法)
#import <objc/message.h>
[k print];
二、NSObject类中一些常用的方法
//判断在Kitty类中是否存在print实例方法(instances 实例)
a、[KittyinstancesRespondToSelector:@selector(print)]
//利用NSObject类中的methodForSelector:方法,可以获得一个指向方法实现的指针,并可以使用该指针直接调用方法实现,当一个消息要被发送给某个对象很多次的时候,可以直接使用methodForSelector:来进行优化。
b、[kitty methodForSelector:@selector(print)]
//标记问完成的功能,实现类似于纯虚函数的功能,实现虚基类的功能
c、[selfdoesNotRecognizeSelector:@selector(print)];
[son isKindOfClass:[Kittyclass]]
[son isMemberOfClass:[Kittyclass]]