runtime是oc的运行时机制,其中最重要的是他的消息机制,
RunTime 运行机制 :运行时候的一些机制
>最重要的是消息机制
>方法调用的本质就是让对象发送消息 只有对象能够发送消息,所以使用objc_开头,就算是 类方法也是类对象在发送消息 :发送消息的过程是runtime库会根据isa指针找到对应的 类 在类和父类的方法列表中找 如果在最顶类(NSObject)中也没有找到的话,会报方 法找不到这个错 <oc 给了我们三个拯救的机会
(1)Method resolution :调用
+ (BOOL)resolveClassMethod:(SEL)sel
+ (BOOL)resolveInstanceMethod:(SEL)sel
(2) Fast forwarding
(3) Normal forwarding
>
>一些项目中能用的技术
(1)使用runtime交换方法:系统类 的方法功能不够;1使用继承类,重写方法 2使用runtime交换方法 :使用分类,只有分类才能给系统的类添加方法,并且通过添加的这个方法来进行方法交换,交换步骤在分类的load 方法中调用, 通过class_getClassMethod
获取方法地址, 通过 method_exchangeImplementations 交换方法注意的是 在方法交换后如果你在实现自己的方法的时候,要记住系统的方法已经被我们换掉了,所以调用我们自己的方法就代表调用系统的方法
(2)使用runtime动态添加方法:如果一个类方法非常多,加载类到内存的时候也比较消耗资源,可以使用runtime动态添加方法来解决 <经典面试题:有没有使用performSelector,其实主要想问你有没有动态添加过方法。> :
RunTime 运行机制 :运行时候的一些机制
>最重要的是消息机制
>方法调用的本质就是让对象发送消息 只有对象能够发送消息,所以使用objc_开头,就算是 类方法也是类对象在发送消息 :发送消息的过程是runtime库会根据isa指针找到对应的 类 在类和父类的方法列表中找 如果在最顶类(NSObject)中也没有找到的话,会报方 法找不到这个错 <oc 给了我们三个拯救的机会
(1)Method resolution :调用
+ (BOOL)resolveClassMethod:(SEL)sel
+ (BOOL)resolveInstanceMethod:(SEL)sel
(2) Fast forwarding
(3) Normal forwarding
>
>一些项目中能用的技术
(1)使用runtime交换方法:系统类 的方法功能不够;1使用继承类,重写方法 2使用runtime交换方法 :使用分类,只有分类才能给系统的类添加方法,并且通过添加的这个方法来进行方法交换,交换步骤在分类的load 方法中调用, 通过class_getClassMethod
获取方法地址, 通过 method_exchangeImplementations 交换方法注意的是 在方法交换后如果你在实现自己的方法的时候,要记住系统的方法已经被我们换掉了,所以调用我们自己的方法就代表调用系统的方法
(2)使用runtime动态添加方法:如果一个类方法非常多,加载类到内存的时候也比较消耗资源,可以使用runtime动态添加方法来解决 <经典面试题:有没有使用performSelector,其实主要想问你有没有动态添加过方法。> :