美文网首页
category为什么不能添加属性

category为什么不能添加属性

作者: xiaowu0125 | 来源:发表于2019-04-26 13:42 被阅读0次

    首先要明白什么是属性:

    属性 = ivar + setter + getter(成员变量+setter方法+getter方法)。

    在category中添加属性,category只会声明setter,getter,而不会去实现。编译的时候,是可以通过的,但是会报警告。

    在别处调用这个属性的setter、getter方法,程序也会闪退。

    如果要想实现,就要用runtime手动实现setter、getter方法。

    在getter、setter方法中分别使用objc_getAssociatedObject、objc_setAssociatedObject动态获取、绑定这个属性。

    category的结构体定义如下:

    struct category_t {

    constchar*name;//类的名字(name)

    classref_t cls;//类(cls)

    struct method_list_t *instanceMethods; //category中所有给类添加的实例方法的列表(instanceMethods)

    struct method_list_t *classMethods;//category中所有添加的类方法的列表(classMethods)

    struct protocol_list_t *protocols; //category实现的所有协议的列表(protocols)

    struct property_list_t *instanceProperties;//category中添加的所有属性(instanceProperties)

    };

    相关文章

      网友评论

          本文标题:category为什么不能添加属性

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