分类能添加属性吗?成员变量呢?为什么?

在iOS开发中,如果你要在不改变原来的类内容的基础上,为类增加一些方法,那么苹果提供了一个很好机制,那就是分类,当然我们平时可能比较多的是直接给他添加方法,并且我们清楚一点的是,我们还能给一个分类添加属性(使用关联对象),但是并不能添加成员变量,可是为什么刚好成员变量就不能连接呢……

分类

概念:

Category  分类是OC特有的语言,依赖于类。

分类的作用:

在不改变原来的类内容的基础上,为类增加一些方法。

分类增加属性和方法

属性

方法

这里其实就不用做过多介绍了,只需要知道分类增加方法其实就和一个类增加一个方法一样。

属性

至于分类增加属性,只要使用到的就是Objective-C里面比较底层的一个技术Runtime,Runtime里面有个里面有个关联对象的概念,具体请查看官方或者相关资料,很简单。

成员变量

NO,NO,NO,分类是不能增加属性的,一定没办法,如果你有可以来找我,哈哈….

为什么不能增加成员变量呢?

首先我们不能混淆了成员变量和属性的概念.Property是Property,Ivar是Ivar。

分类里面不能添加Ivar是因为分类本身并不是一个真正的类(Objective-C中真正的类是有一个isa存在的),但是分类并没有自己的ISA .

类最开始生成了很多基本属性,比如IvarList,MethodList,分类只会将自己的method attach到主类,并不会影响到主类的IvarList。

这就是为什么分类里面不能增加成员变量的原因”

类和分类的初始化

1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次;

2.当第一次使用某个类时,就会调用当前类的+initialize方法;

3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法,最后调用分类的+load方法),先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)。

4.注意:在初始化的时候,如果在分类中重写了+initialize方法,则会覆盖掉父类的。

5.重写+initialize方法可以监听类的使用情况。
坚持原创技术分享,您的支持将鼓励我继续创作!