美文网首页
Category 为什么不能添加实例变量

Category 为什么不能添加实例变量

作者: 苏苏慢跑 | 来源:发表于2020-11-25 08:29 被阅读0次

在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针。但是分类没有。

Category可以动态添加属性,但是不能添加实例变量。

原因:分类没有自己的isa指针.“类最开始生成了很多基本属性,比如IvarList,MethodList。分类只会将自己的method attach到主类,并不会影响到主类的IvarList。这就是为什么分类里面不能增加成员变量的原因”,实例变量没有setter和getter方法。也没有自己的isa指针。所以,就算系统不报错也不能用。

runtime给Category动态添加属性

从下图可以看到。分类添加成员变量报错。添加属性不报错,但是会有警告。并且告诉我们要的去添加setter和getter方法或者用@dynamic修饰。(注意:用@dynamic修饰只是告诉属性setter和getter必须要自己声明。只能解出警告。不能解决问题。运行时会崩溃)

[图片上传中...(5239357-16fb5e9e4ac194ff.png-c456a2-1606264052658-0)] 5239357-16fb5e9e4ac194ff.png

解决警告方法:

1.@dynamic修饰。(注意:用@dynamic修饰只是告诉属性setter和getter必须要自己声明。只能解出警告。不能解决问题。运行时会崩溃)

2.runtime给Category动态添加属性

5239357-853df9d15ecbd7e6.png

相关文章

  • Category笔记

    为什么Category无法添加实例变量? Category是无法添加实例变量的,当一个类被编译时,实例变量的布局也...

  • 为什么category不能添加实例变量

    来自stackoverflow的答案,作者说只是猜想,也可能猜错了,不过我觉得很有道理。 不想看英语,请到最后看大...

  • Category 为什么不能添加实例变量

    在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针...

  • 集锦1

    1.category和extension 类目只能为原有类添加方法,不可以添加实例变量(category不能给类添...

  • Category能否添加成员变量

    Category能否添加成员变量,如果可以,怎么给Category添加成员变量? 不能直接给Category添加成...

  • 笔记-关联对象

    目录 面试题 伪代码实现 Category添加属性的几种用法 Category为什么不能添加成员变量 底层源码解读...

  • IOS基础知识-关联对象原理篇

    Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但是可以...

  • iOS底层总结- 关联对象实现原理

    前言 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,但...

  • Associated Objects关联对象

    在之前文章说过。category 可以添加方法,可以添加协议实现,可以添加属性,但是却不能添加实例变量。那么如果在...

  • iOS底层原理总结 - 关联对象实现原理

    面试题 Category能否添加成员变量?如果可以,如何给Category添加成员变量?答:不能直接添加成员变量,...

网友评论

      本文标题:Category 为什么不能添加实例变量

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