美文网首页
运行时给分类添加属性

运行时给分类添加属性

作者: 伊蕊飘零 | 来源:发表于2016-08-05 23:42 被阅读49次

今天写程序的时候写了一个分类,我们都知道分类是在不改变原类的基础上添加新方法,却不能添加属性,若是添加了那么调用的时候就会崩溃,那么怎么办呢??我们利用运行时可以实现动态的给类增加属性

**扩展下:Gategory(分类/类别)
分类只能增加方法不能增加成员变量,可以声明属性,实际上会生成属性的set和get方法,但不会生成带下划线的成员变量.
若是在分类中用@property声明的属性,不会自动生成get /set方法的实现

标记是哪个关联的key 一般常用的有三种写法
1、static void *strKey = &strKey;
2、static NSString *strKey = @"strKey";
3、static char strKey;
关联策略是个枚举值,解释如下:
enum {
OBJC_ASSOCIATION_ASSIGN = 0, //关联对象的属性是弱引用
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, //关联对象的属性是强引用并且关联对象不 使用原子性
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, //关联对象的属性是copy并且关联对象不使 用原子性
OBJC_ASSOCIATION_RETAIN = 01401, //关联对象的属性是copy并且关联对象使用原子性 OBJC_ASSOCIATION_COPY = 01403 //关联对象的属性是copy并且关联对象使用原子性
};

完成后的整体代码如下:
.h文件
//分类的头文件
@interface ClassName (CategoryName)
@property (nonatomic, strong) NSString *str;
@end

.m文件
#import <objc/runtime.h>
//实现文件
static void *strKey = &strKey;
 @implementation ClassName (CategoryName)
 ‐(void)setStr:(NSString *)str
{
    objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY);
}
‐(NSString *)str
{
          /*
              1.要被关联的对象
              2.关联的key
              */
    return objc_getAssociatedObject(self, &strKey);
}
@end

相关文章

  • 2020-03-09

    分类: 运行时添加类方法列表、实例方法列表、实现协议列表,没有属性列表,使用@property添加的属性,编译期间...

  • 子类和分类怎么选择?

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

  • 分类(Category)添加属性

    OC的分类允许给分类添加属性,但不会自动生成setter和getter,可通过运行时建立关联引用,添加一个titl...

  • Add CGFloat property to Category

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

  • Category分类注意事项

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

  • ios 利用runtime给分类动态添加属性

    1、分类默认是不能添加属性的,这里我们用runtime实现给分类添加属性,本例给UIView添加一个string属...

  • 运行时给分类添加属性

    今天写程序的时候写了一个分类,我们都知道分类是在不改变原类的基础上添加新方法,却不能添加属性,若是添加了那么调用的...

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

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

  • runtime相关

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

  • Category 用runtime 关联对象

    如何给NSArray添加一个属性(不能使用继承)?不能用继承,难道用分类?但是分类只能添加方法不能添加属性啊(Ca...

网友评论

      本文标题:运行时给分类添加属性

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