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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,873评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,923评论 6 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,966评论 25 709
  • 突降一场暴雨,宣泄后,空气一片纯净。打开阳台的窗,一阵凉风掀起一股新翻泥土的气息,这就是我想要的世界。 ...
    楼念念阅读 2,523评论 0 0

友情链接更多精彩内容