1. 分类.


     类别、类目、category


 


 


  2. 写1个学生类:类中有很多个方法.


 


     吃 喝 拉 撒 睡.... 基本行为


     学习、敲代码、写书.... 学习


     玩Dota 玩LOL 玩CF.... 玩


     爬山、跑步、踢足球..... 运动


     ......


 


     如果将这些方法都写在同1个类模块中.当然完全是可以的.


     如果全都写在一个模块中,就显的很臃肿. 后期难以维护和管理.


 


 


     默认情况下1个类独占1个模块.这个是将所有的成员都写在这1个模块中.就很男管理.


 


     我们的想法: 那就让1个类占多个模块.将功能相似的方法定义在同1个模块中.


               这样的好处: 方便维护和管理.


 


 


     如何将1个类分成多个模块呢?


 


 


  3. 分类:


 


     1). 顾名思义: 将1个类分为多个模块.


 


     2). 如何为1个类添加分类.


 


         


     3). 会生成1个.h 和1个.m的模块.


 


         a. 模块的文件名:  本类名+分类名.h     本类名+分类名.m


 


    


     4). 添加的分类也分为声明和实现.


 


         @interface 本类名 (分类名)


 


         @end


 


         代表不是新创建1个类.而是对已有的类添加1个分类. 小括弧中写上这个分类的名字.


         因为1个类可以添加多个分类 为了区分每1个分类.所以分类要取名字.


 


 


         @implementation Student (itcast)


         


         @end


 


         这是分类的实现.


 


 


  4. 分类的使用.


 


     1) 如果要访问分类中定义的成员,就要把分类的头文件引进来.


 


 


 


  5. 分类的作用: 将1个类分为多个模块.


 


  6. 分类的作用在于可以将我们写类分为多个模块.


 

     可以不可以为系统的类写1个分类呢?

 

     为系统自带的类写分类 这个就叫做非正式协议.

 

 



 7. 分类的第2个作用:


      为1个已经存在的类添加方法.

 

 

  分类的作用

 

  1). 将臃肿的类分为多个模块 方便管理.

 

  2). 扩展1个类.

 


 --------------------------------------------


 使用分类注意的几个地方:


1. 分类只能增加方法,不能增加属性


 


2. 在分类之中可以写@property 但是不会自动生成私有属性. 也不会自动生成getter setter的实现.


       只会生成getter setter的声明.


       所以,你就需要自己写getter 和 setter的声明. 也需要自己定义属性 这个属性就必须在本类中.


 


3. 在分类的方法实现中不可以直接访问本类的真私有属性(定义在本类的@implementation之中)


       但是可以调用本类的getter setter来访问属性.


 


       本类的@property生成的私有属性,只可以在本类的实现中访问.


       分类中不能直接访问私有属性 真.


       分类可以使用 getter setter 来访问.


 


        4. 分类中可以存在和本类同名方法的.


        当分类中有和本类中同名的方法的时候, 优先调用分类的方法.哪怕没有引入分类的头文件.


       如果多个分类中有相同的方法, 优先调用最后编译的分类.


 


 


 ------------------------------------


 什么时候需要使用分类.


 


   1.当1个类的方法很多很杂的时候. 当1个类很臃肿的时候,那么这个时候我们就可以使用分类. 


将这个类分为多个模块.将功能相似的方法写在同1个模块之中.