ios-Category补充

在分类中我们可以写@property但是不能在interface中定义变量

在分类中写的@property不会生成私有变量比如说你定义了个int age属性不会生成_age这个私有变量

在分类中写的@property不会自动生成getter和setter方法,只会生成getter和setter方法的声明

在分类中不可以直接访问在在最开始那个类中的生成的私有变量,就比如说有Student类和Student+kk这个分类,在Student.h中定义的@property属性生成的私有变量不能再分类中直接访问。但是可以调用setter方法和getter方法来进行访问。

如果是在Student.m文件中声明的属性,则在分类中getter和setter方法也无法访问到。

在Student,h中@interface声明的变量分类中都可以访问的到.而在.m文件中@interface声明的变量都访问不到。无论是@private还是@public还是@protected都访问不到

总结而说就是说在Student.m文件中的@property和在@interface中声明的变量都不能在分类中被访问到。除非你在.h文件中给@interface中定义变量声明了它的setter方法和getter方法和定义了@proterty的setter方法和getter方法的声明才可以用set方法和get方法来进行间接访问

如果分类中存在和本类中相同名字的方法(这里本类指的就是Student.h那个类,下面都用本类来代替)优先调用分类中的访问,哪怕你在调用方法的地方没有声明分类的头文件。

如果在Student的两个分类中都有同名的方法,就优先调用最后编译的类,怎么看编译的顺序呢在下图中的Compile Sources中可以查看。

ios-Category补充

大家也都可以自己去尝试一下。

当一个类的方法有很多的时候,我们就要去创建分类来进行管理,这样方便去维护。以后查找起来会比较方便。