ios runtime简单实用(添加动态属性)

#import "Person.h"

@interface Person (PersonCategory)
 
// 添加Person中没有的name属性
@property (nonatomic, copy) NSString *name;

@end
 
 
#import "Person+PersonCategory.h"
#import <objc/runtime.h>

@implementation Person (PersonCategory)
//定义常量 必须是C语言字符串
static char *PersonNameKey = "PersonNameKey";

- (void)setName:(NSString *)name {
    /*
     OBJC_ASSOCIATION_ASSIGN;            //assign策略
     OBJC_ASSOCIATION_COPY_NONATOMIC;    //copy策略
     OBJC_ASSOCIATION_RETAIN_NONATOMIC;  // retain策略
    
     OBJC_ASSOCIATION_RETAIN;
     OBJC_ASSOCIATION_COPY;
     */
    /*
     * id object 给哪个对象的属性赋值
     const void *key 属性对应的key
     id value  设置属性值为value
     objc_AssociationPolicy policy  使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC
     objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
     */
   
   
    objc_setAssociatedObject(self, PersonNameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name {
    return objc_getAssociatedObject(self, PersonNameKey);
}
 
原文地址:https://www.cnblogs.com/xsyl/p/6419522.html