添加属性的本质就是将一个属性与一个对象关联起来(指针)。
Runtime大多是对系统类进行操作
//ViewController.m
#import "ViewController.h"
#import "NSObject+Property.h"//动态添加属性的分类
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//为object对象动态添加一个prop属性
NSObject *object = [[NSObject alloc] init];
object.prop = @"prop";
NSLog(@"%@",object.prop);
}
//NSObject+Property.h
@interface NSObject (Property)
//在类别中不能添加属性,使用@property会自动生成get、set方法声明,不生成实现,不生成属性
@property NSString *prop;
@end
//NSObject+Property.m
#import "NSObject+Property.h"
#import <objc/message.h>//引入Runtime
@implementation NSObject (Property)
- (void)setProp:(NSString *)prop
{
/**
* 通过Runtime动态添加属性
* object 给哪个对象添加属性
* key 属性名称
* value 属性值
* policy 保存策略
*/
objc_setAssociatedObject(self, @"prop", prop, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)prop{
return objc_getAssociatedObject(self, @"prop");
}
@end