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必须要自己声明。只能解出警告。不能解决问题。运行时会崩溃)
![](https://img.haomeiwen.com/i24251521/b88beb92054c3c29.png)
[图片上传中...(5239357-16fb5e9e4ac194ff.png-c456a2-1606264052658-0)]
![](https://img.haomeiwen.com/i24251521/e15bf6f73ad1a6f3.png)
5239357-16fb5e9e4ac194ff.png
解决警告方法:
1.@dynamic修饰。(注意:用@dynamic修饰只是告诉属性setter和getter必须要自己声明。只能解出警告。不能解决问题。运行时会崩溃)
2.runtime给Category动态添加属性
![](https://img.haomeiwen.com/i24251521/df4c6a351b6c4031.png)
5239357-853df9d15ecbd7e6.png
本文标题:Category 为什么不能添加实例变量
本文链接:https://www.haomeiwen.com/subject/nkygiktx.html
网友评论