知识点33:运行时之动态添加属性(分类中添加)

2017-02-15  本文已影响19人  枫之叶_小乙哥

2.动态添加属性

用途:
- 1.页面传值
- 2.统一添加属性,方便管理,如:友盟页面统计时,传入的页面名称.

// 控制器中
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSObject *objc = [[NSObject alloc] init];
    // 实质调用了objc的set方法(name是分类动态添加的属性)
    objc.name = @"123";
    NSLog(@"%@",objc.name);
    
    
}
// .h文件
#import <Foundation/Foundation.h>


@interface NSObject (Objc)

@property (nonatomic, strong) NSString *name;

@end

#import "NSObject+Objc.h"

#import <objc/message.h>

@implementation NSObject (Objc)

//static NSString *_name;

// 定义关联的key
static const char *key = "name";

- (void)setName:(NSString *)name
{
    // 添加属性,跟对象
    // 给某个对象产生关联,添加属性

    // object:给哪个对象添加属性
    // key:属性名,根据key去获取关联的对象 ,  void * == id
    // value:关联的值
    // policy:策略
    // 方法一:
//    objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    // 方法二:
//    objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    // 方法一三:
    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

//    _name = name;
}

- (NSString *)name
{
    // 方法一:
//    return objc_getAssociatedObject(self, @"name");
    // 方法二:
//    return objc_getAssociatedObject(self, key);
    // 方法三:
    return objc_getAssociatedObject(self, _cmd);

}

@end

上一篇下一篇

猜你喜欢

热点阅读