美文网首页
运行时-属性添加

运行时-属性添加

作者: lltree | 来源:发表于2018-06-08 18:27 被阅读17次

如果为某一个类添加一个属性有时候需要使用运行时的方式添加
Associate:关联

//设置关联对象
 void
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
                         id _Nullable value, objc_AssociationPolicy policy)
//获取关联对象
id _Nullable
objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)

设置关联对象

参数说明涉及:
object :关联对象的目标
key :关联对象的键值
value : 要添加的关联对象,如果我们添加int型属性则必须把 参数封装成对象的形式
policy :保存对象的策略,数值型使用OBJC_ASSOCIATION_ASSIGN,字符串使用OBJC_ASSOCIATION_COPY等

typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {
    OBJC_ASSOCIATION_ASSIGN = 0,           /**< Specifies a weak reference to the associated object. */
    OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, /**< Specifies a strong reference to the associated object. 
                                            *   The association is not made atomically. */
    OBJC_ASSOCIATION_COPY_NONATOMIC = 3,   /**< Specifies that the associated object is copied. 
                                            *   The association is not made atomically. */
    OBJC_ASSOCIATION_RETAIN = 01401,       /**< Specifies a strong reference to the associated object.
                                            *   The association is made atomically. */
    OBJC_ASSOCIATION_COPY = 01403          /**< Specifies that the associated object is copied.
                                            *   The association is made atomically. */
};

//获取关联对象
获取关联对象需要使用运行时的方式根据关联对象的键值方式取出对象, 然后根据返回的结果 把对象转化为需要的返回的数据类型

其中
实例如下:

#import "WBDetailBaseTemplateModel.h"

@interface WBDetailBaseTemplateModel (Extension)
@property (nonatomic,assign) int style;
@end

#import "WBDetailBaseTemplateModel+Extension.h"
#import <objc/runtime.h>

char* const ASSOCIATION_style = "ASSOCIATION_style";

@implementation WBDetailBaseTemplateModel (Extension)


#pragma mark 运行时添加属性
-(void)setStyle:(int)style{
    objc_setAssociatedObject(self,ASSOCIATION_style,@(style),OBJC_ASSOCIATION_ASSIGN);
}
-(int)style{
 
    return  [objc_getAssociatedObject(self,ASSOCIATION_style) intValue ];
}

@end

相关文章

  • iOS中的runTime

    运行时,我们最常见的可能就是创建类别(Category),为类别添加属性,类别是不能直接添加属性的,可以添加方法,...

  • Add CGFloat property to Category

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

  • 运行时-属性添加

    如果为某一个类添加一个属性有时候需要使用运行时的方式添加Associate:关联 设置关联对象 参数说明涉及:ob...

  • 2020-03-09

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

  • Category分类注意事项

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

  • iOS底层--runtime应用之动态添加属性/成员变量

    问题 1、编译完成的类 能否对其添加变量/属性2、运行时创建的类,能否对其添加变量/属性 备用的方法: 1、编译时...

  • JS--Expando 属性和方法

    JavaScript 中的所有对象均支持 expando 属性和方法,这些属性和方法可在运行时动态添加和移除。这些...

  • 2018-03-15 category(类别) 继承 Exten

    1:category category可以在运行时为现有的类添方法,不能添加属性和成员变量,但是利用运行时机制,可...

  • 子类和分类怎么选择?

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

  • 类别添加属性 运行时runtime

    #import"BaseClass.h" @interfaceBaseClass (BaseCategary) @...

网友评论

      本文标题:运行时-属性添加

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