码迷,mamicode.com
首页 > 其他好文 > 详细

RunTime 动态消息机制

时间:2019-09-28 10:54:06      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:属性   exchange   policy   对象产生   ram   没有   lan   param   ref   

##什么是RunTime机制

  • oc在编译的时是不知道调用哪个函数,运行时找不到就报错
  • C语言在编译的时候就知道调用哪个方法

    [p eat]
    消息机制 任何方法调用 本质都是发送消息
    [p performSelector:@selector(<#selector#>)]
     #import <objc/message.h> 倒入运行时框架
    运行时发送消息 谁做事情就去调用谁 xcode5以后 不给底层的方法让开发者调用
    调用类方法 其实 就是变成一个类对象  本质 类名转换成类对象  
    
    • 分类没有父类
      重写系统自带的方法 扩展 有一点不好的地方就是 到处导入头文件 很臃肿
      (IMP方法的实现)

###利用runtime 交换方法的实现
+(void)load{
Method imageName = class_getClassMethod([UIImage class], @selector(imageNamed:));
method_exchangeImplementations(imageName, ttmIimge);
Method ttmIimge = class_getClassMethod([UIImage class], @selector(ttm_imagenamed:))
}

###动态添加方法

  • 性能上的优化 可以用到的时候再加载
  • 当一个方法没有实现 但是又调用了这个方法 就会调用resolveInstanceMethod这个方法

    +(BOOL)resolveInstanceMethod:(SEL)sel{

    if ([NSStringFromSelector(sel) isEqualToString:@"eat"]) {
        /**
         *  <#Description#>
         *
         *  @param cls#>   给那个类 description#>
         *  @param name#>  添加方法的编号 description#>
         *  @param imp#>   方法实现 入口 函数名 description#>
         *  @param types#> 方法类型 description#>
         *
         *  @return <#return value description#>
         */
    class_addMethod([self class], @selector(resolveThisMethodDynamically), (IMP) myMethodIMP, "v@:");
    }
    }    +(BOOL)resolveClassMethod:(SEL)sel{}
    

###动态添加属性

  • 给对象产生一种关联 而不是真的增加代码区别于动态增加方法
  • 给nsobject 增加一个属性

    /**
        跟对象产生一个关联属性
     *
     *  @param object#> 要产生管理的属性 description#>
     *  @param key#>    属性名字 description#>
     *  @param value#>  属性的值 description#>
     *  @param policy#> 策略 就是 strong之类的 description#>
     *
     *  @return
     */
    objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)
    objc_getAssociatedObject(<#id object#>, <#const void *key#>)
    

原文:大专栏  RunTime 动态消息机制


RunTime 动态消息机制

标签:属性   exchange   policy   对象产生   ram   没有   lan   param   ref   

原文地址:https://www.cnblogs.com/petewell/p/11601730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!