zoukankan      html  css  js  c++  java
  • category类别中添加属性

    博主文章链接:http://www.jianshu.com/p/935142af6a47

    //1.不能添加的原因

    首先, 使用@property的时候,系统会自动生成带“_”的成员变量和该变量的setter和getter方法。也就是说,属性相当于一个成员变量加getter和setter方法。

    但是,在类别添加属性,  此时person类里并没有添加带“_”的成员变量,也没有实现setter和getter方法,只是在属性列表里添加了height属性。并且此时如果在控制器里调用self.height,程序运行时会报错,显示找不到该方法

    //综上\成员变量是一个类的东西,分类本身就不是一个类,分类本来就是OC里面通过运行时动态的为一个类添加的一些方法和属性等,不是一个真正的类,它并没有自己的ISA,类最开始生成了很多基本属性,比如IvarList,MethodList,分类只会将自己的method attach到主类,并不会影响到主类的IvarList。这就是为什么分类里面不能增加成员变量的原因。

     

     

    //2.添加的方法

    #import <objc/runtime.h>

    @interface HeartView (testProperty)

     

    @property(nonatomic,copy)NSString *str ;

    @property (nonatomic, copy) NSString *height;

     

    @end

     

    static void *strKey = &strKey;

     

    @implementation HeartView (testProperty)

     

    -(void)setStr:(NSString *)str

    {

        objc_setAssociatedObject(self, & strKey, str, OBJC_ASSOCIATION_COPY);

    //objc_setAssociatedObject(self, @"height", height, OBJC_ASSOCIATION_COPY_NONATOMIC);//方式2

     

    }

     

    -(NSString *)str

    {

        return objc_getAssociatedObject(self, &strKey);

    // return objc_getAssociatedObject(self, @"height");

    }

     

    @end

     

     

    //用来标记是哪一个属性的key常见有三种写法,但代码效果是一样的,如下:

    //

    ////利用静态变量地址唯一不变的特性

    //1static void *strKey = &strKey;

    //

    //2static NSString *strKey = @"strKey";

    //

    //3static 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并且关联对象使用原子性

    //};

  • 相关阅读:
    Python实例1-Collatz 序列
    Git 教程
    python 算法基础
    认识 flask框架 及 介绍
    python 虚拟环境
    Numpy基本操作学习
    Jupyter Notebook 快捷键指南
    Gallery——Matplotlib
    list.pop()函数操作头部与尾部的计时试验
    list 与 dict 的in操作比较试验
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6418329.html
Copyright © 2011-2022 走看看