美文网首页
给分类(Category)添加属性(实例变量)

给分类(Category)添加属性(实例变量)

作者: GaoFeiNo1 | 来源:发表于2018-09-26 16:04 被阅读0次

    突然想到了这么一个问题,就是创建的 一个类的 分类时 想要添加属性,之后被访问,该怎么办?正常情况下,在类目中是无法添加属性,但是...真的不可以吗?答案是否定的.

    先上图之后 再做解释,请看下图:

    .h文件中,先声明属性

    .h文件

    .m文件中,去实现方法

    .m文件

    这样做完之后,在使用MMWPTHTTPService的实例变量时就可以给name这个属性进行赋值及访问啦。(注意点!!!!!:分类中添加的属性 只能在本类的实例变量中能够使用,在其子类下是无法进行访问的,可以理解成为本类的私有属性)

    /// - ======== 正文开始 进行解释 ======= -

    1. .h文件的声明属性,在这儿就不做多解释了,声明一个属性即可。下面重点放到.m文件中说明。

    2.想要在 类目中添加属性 被使用时,需要用到一个核心技术 runtime机制去实现 属性存取方法,即: getter和setter方法。

    (1).在.m中首先导入 runtime时的头文件: #import <objc/runtime.h>

    (2).在.m中添加setter方法:- (void)setName:(NSString*)name、和 getter方法:- (NSString*)name,见上图。在setter方法中的objc_setAssociatedObject是有四个参数的,分别是原对象(本类self)、关联时用到的标记(nameKey:即哪个属性的key,最好使用属性名+key。因为属性可以添加多个,易于区分)、关联的对象和一个关联策略。

    其中nameKey的写法有以下几种,仅供参考:(利用静态变量地址唯一不变的特性)

    1.static void *nameKey = &nameKey;

    2.static NSString * nameKey = @"nameKey";

    3.static char nameKey;

    关联策略是个枚举值,将其进行了百度翻译,如下:

    /**

     * Policies related to associative references.

     * These are options to objc_setAssociatedObject()

     */

    typedefOBJC_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. *///关联对象的属性是copy并且关联对象不使用原子性

        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. */关联对象的属性是copy并且关联对象使用原子性

    };

    ===== --- ===== 打功完成 ==== ----

    相关文章

      网友评论

          本文标题:给分类(Category)添加属性(实例变量)

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