美文网首页
runtime动态添加方法属性

runtime动态添加方法属性

作者: StoneWing | 来源:发表于2018-07-20 09:48 被阅读12次
  • 动态添加方法

    • 一般我们定义一个类,添加一个方法

      • 定义一个person类
      • 添加一个方法eat,实现方法
      - (void)eat {
              NSLog(@"吃东西");
      }
      
      • 使用:
      Person *p = [[Person alloc] init];
      [p eat];
      
  • 这样的做法是:eat这个方法在person类初始化的时候就加入到内存序列中了,不管使用没使用


  • runtime动态添加方法

  • 同样的定义一个person类
  • 初始化调用 方法
    Person *p = [[Person alloc] init];
    //  这个时候调用eat,由于我们在类里面并没有定义方法,所以程序会崩溃,下面我们动态添加方法
    [p performSelector:@selector(eat)];
  • 动态添加方法(resolveInstanceMethod实现)
// 创建一个函数(方法的实现)
void eat(id self, SEL _cmd)
{
    NSLog(@"吃东西");
}

+ (BOOL)resolveInstanceMethod:(SEL)sel {
    
    // 判断是否调用的这个方法
    if (sel == @selector(eat)) {
        // 添加方法:当前类,方法,IMP,char(v:无返回值,@:(第一个参数)self,:(第二个参数)SEL)
        class_addMethod(self, sel, (IMP)eat, "v@:");
        // 执行完成
        return YES;
    }
    
    return [super resolveInstanceMethod:sel];
}

//   [p performSelector:@selector(eat)];现在我们调用就正常运行了

动态添加属性

  • 新建一个NSObject的扩展类,创建name属性
  • 实现set,get方法
- (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name {
    
    return objc_getAssociatedObject(self, @"name");
}
  • 使用:导入扩展包头文件
  NSObject *objc = [[NSObject alloc] init];
    objc.name = @"123";
    NSLog(@"%@",objc.name);

相关文章

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • runtime和oc内存区域(2018-04-02)

    runtime常用的几个方法: 交换方法 动态添加属性 动态添加方法 1.交换方法 class_getClassM...

  • iOS runtime 动态添加属性,方法,方法交换案例

    iOS runtime 动态添加属性,方法,方法交换案例 动态添加属性 我之前写过分类的文章,说过,分类不能添加成...

  • Objective-C关联对象的实现

    目的 在 NSObject 类中,添加 name 属性。 方案 利用 runtime 的相关方法: 动态添加属性 ...

  • iOS Runtime经典面试题整理

    1,runtime 如何动态添加方法和属性和动态属性控制 通过苹果官方文档查看,我们可以发现runtime的内部存...

  • iOS-RunTime使用-给空白页添加占位图

    思路:使用RunTime动态添加属性的方法给UIView添加view属性、使所有View具有该属性 效果图 源码:...

  • iOS Runtime学习(三) -- 简单使用篇

    一、前言 runtime功能很强大,本文简单的介绍几个实用的小功能,如动态添加属性,动态添加方法,方法替换,字典转...

  • runtime常见问题

    1 . iOS runtime 运行时,动态添加属性方法首先, 要明白为什么要动态给类添加方法? 如果一个类方法很...

  • 动态添加属性

    动态添加属性:什么时候需要动态添加属性? 开发场景:给系统的类添加属性的时候,可以使用runtime动态添加属性方...

网友评论

      本文标题:runtime动态添加方法属性

      本文链接:https://www.haomeiwen.com/subject/gzcfmftx.html