美文网首页
iOS-RunTime 动态添加属性和方法

iOS-RunTime 动态添加属性和方法

作者: rainbowboy | 来源:发表于2018-09-21 12:21 被阅读8次

1.1动态添加属性:

#import "Person.h"
#import <objc/runtime.h>

const char *homeKey = "homeKey";
@implementation Person

@dynamic home;
//通过运行时,动态添加属性
- (void)setHome:(NSString *)home {
    [self willChangeValueForKey:home];
    objc_setAssociatedObject(self, &homeKey, home, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:home];
}
-(NSString *)home {
   return  objc_getAssociatedObject(self, &homeKey);
}

@end

1.2调用:

Person *p = Person.new;
    p.home  = @"上海虹口区";
    NSLog(@"my home is %@",p.home);

1.3输出结果:

my home is 上海虹口区

2.1动态添加方法

//动态添加方法
    SEL pSelector = NSSelectorFromString(@"addMethod:");
    class_addMethod(p.class, pSelector, (IMP)pMethod, "v@:@");
    
    if ([p respondsToSelector:pSelector]) {
        [p performSelector:pSelector withObject:@"message"];
    }

void pMethod(id self,SEL _cmd,NSString *str){
    NSLog(@"给person添加一个方法addMethod %@",str);
}

2.2输出结果:

给person添加一个方法addMethod message

3.1动态添加属性检测

unsigned int count = 0;
    
    Ivar *vars = class_copyIvarList(p.class, &count);
    for (NSInteger i = 0; i < count; i++) {
        Ivar var = vars[i];
        NSLog(@"v = %s",ivar_getName(var));//通过取成员变量的方式无法拿到动态添加的属性home
    }
    objc_property_t *pros =class_copyPropertyList(p.class, &count);
    
    for (NSInteger i = 0; i < count; i++) {
        objc_property_t var = pros[i];
        NSLog(@"p = %s",property_getName(var));//通过取全部属性的方式可以拿到动态添加的属性home
    }

3.2检测结果

p = home

祭出demo
更新时间2018-09-21

相关文章

  • iOS-RunTime 动态添加属性和方法

    1.1动态添加属性: 1.2调用: 1.3输出结果: 2.1动态添加方法 2.2输出结果: 3.1动态添加属性检测...

  • 二十一:Python之动态添加属性方法

    一:动态添加属性方法 动态添加属性:类属性,成员属性 动态添加方法:成员方法,类方法,静态方法 动态添加对象方法需...

  • js对象

    1.动态添加属性方法 2.动态删除属性和方法 3.构造方法

  • runtime相关

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

  • 动态添加属性和方法

    Python 作为一门动态语言,我们可以动态的给对象添加属性或方法,而不是必须一开始就在类中声明好。关于动态添加属...

  • 动态添加属性和方法

    动态添加属性和方法 https://www.cnblogs.com/semon-code/p/8257826.html

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

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

  • iOS RunTime 理解

    可以遍历对象的属性 可以动态的添加、修改属性,动态添加、修改、替换方法,动态添加、修改、替换协议 可以动态创建类、...

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

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

  • runtime的理解(二)

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

网友评论

      本文标题:iOS-RunTime 动态添加属性和方法

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