快速上手Runtime(二)之给分类添加属性

我们都知道,分类是不能直接添加属性的,那么我们有时候又需要实现这个功能,那么我们应该怎么办才能为分类添加上属性呢。

Runtime给分类添加属性原理

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

Runtime给分类添加属性步骤

1.在分类的.h文件中声明想要定义的属性

2.在分类的.m文件中实现getter和setter方法

3.引入runtime头文件,然后在setter方法中用objc_setAssociatedObject关联对象

比如给NSObject建一个分类,分类里面添加一个name 属性:

#import <Foundation/Foundation.h>

@interface NSObject (Name)

@property (nonatomic,copy)NSString *name;

@end



#import "NSObject+Name.h"
#import <objc/runtime.h>

static void *kName = &kName;
@implementation NSObject (Name)

-(void)setName:(NSString *)name
{
    // object:给哪个对象添加属性
    // key:属性名,根据key去获取关联的对象 ,void * == id
    // value:关联的值
    // policy:策略
    objc_setAssociatedObject(self, kName, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

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

@end

 

实例效果:

Demo地址:https://github.com/domanc/NSObject_Category.git

 

转载于:https://www.cnblogs.com/dianming/p/6602730.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值