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

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

作者: 枫之叶_小乙哥 | 来源:发表于2017-02-15 02:15 被阅读19次

2.动态添加属性

  • 1.原理:给一个类声明属性,其实本质就是给这个类添加关联(即将值的地址关联给类的属性,不是在类中创建对象),并不是直接把这个值的内存空间添加到类存空间。

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

  • 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);
    
    
}
  • 3.NSObject的分类中
// .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

相关文章

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

    2.动态添加属性 1.原理:给一个类声明属性,其实本质就是给这个类添加关联(即将值的地址关联给类的属性,不是在类中...

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

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

  • Category分类注意事项

    1.分类用来添加方法,不能用来添加属性(可以利用运行时特性,动态绑定属性来实现) @proprety只会生成get...

  • 子类和分类怎么选择?

    属性无法满足开发需求的时候,选择子类. 方法不够灵活的时候,选择分类. 分类可以利用运行时,动态添加属性.

  • runtime相关

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

  • 运行时+给分类添加属性

    运行时应用场景 1.在分类中,通过关联对象,给分类动态添加属性,能够让分类解耦,适合开发框架! 2.动态获得一个类...

  • Add CGFloat property to Category

    给扩展类添加CGFloat类型的属性 IOS中可以使用运行时动态给类添加属性,对象类型的属性添加方法大家都知道 但...

  • 动态添加属性

    动态向类中加入属性 (未实现的方法并没有在类的MethodList)在分类中只能添加方法,不能添加属性,在分类中声...

  • 通过分类给控制器添加加载小菊花

    在分类中动态添加属性 知道这个后怎样用在自己的分类之中呢? 给UIViewController 添加一分类 在每次...

  • Category关联对象

    OC中的分类严格来说,是不能添加对象;但是我们可以通过OC运行是的机制,动态为分类添加属性 一、类中的属性 当在类...

网友评论

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

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