以前写JAVA,最近看OC,对类别有些困惑,OC的类别在我看来完全用子类即可,子类其实也不用动到原有的类,实现效果其实一样,至于扩展就更没必要的感觉,非得在.m文件里面定义个扩展,我直接在.h文件定义好这些不就行了,求解惑深层思想

解决方案 »

  1.   

    类别和子类各有好处,举个简单例子,程序中我想实现字符串和日期的快速转换,但这个功能Cocoa库并未提供,你分别试一下用类别和子类实现这个功能,就知道哪个好了
      

  2.   


    正解
    1. "类别"比"子类"方便多了,因为对已添加category的类,使用到它或者它的子类的地方,category都会起作用;“子类”的话,则需要在使用的每个地方,创建子类对象
    2. "类别"只能添加方法,不能加属性、变量
    3. "类别"一般是对框架提供类的扩展(没有源码,不能修改)
    4.  "类别"一般是在不想生成一个新的子类的情况下,比如对 NSArray 的扩展“扩展”则相当于定义一个子类,在里面添加属性和方法