Runtime 作用之 给分类动态添加属性

原理: 给一个类声明属性,其实本质给这个类添加关联,并不是直接把这个值的内存空间添加到类的内存空间.

应用场景:给系统的类或第三方框架的类添加属性.

需求:给系统NSObject类添加字符串name属性.

1.创建分类NSObject + Add;

  • 在.h文件中
#import 

@interface NSObject (Add)

@property(nonatomic,copy)NSString *name;

@end

  • 在.m文件中
#import "NSObject+Add.h"
#import 
#import 


@implementation NSObject (Add)

- (void)setName:(NSString*)name

{   // objc_setAssociatedObject(将某个值跟某个对象关联起来,将某个值存储到某个对象中)
    
    // object:给哪个对象添加属性// key:属性名称// value:属性值// policy:保存策略
    objc_setAssociatedObject(self,@"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
}

- (NSString*)name
{
    return objc_getAssociatedObject(self,@"name");
    
}

@end

2.调用

#import "NSObject+Add.h"

 NSObject *objc = [[NSObject alloc]init];
 objc.name = @"xwx";   
 NSLog(@"动态给NSObject添加的属性为%@",objc.name);

你可能感兴趣的:(Runtime 作用之 给分类动态添加属性)