category和extensions不同在于extensions可以添加属性,并且添加的方法必须实现,extensions可以认为是一个私有的category。
分类可以在不获取不修改原代码的前提下新增新方法,只能添加,不能删除和修改。如果分类和原类中的方法名重名,会覆盖原类中的方法,分类具有更高优先级。
继承可以添加,删除,修改方法,并且还可以添加属性。
两种情况只能使用继承,而不能使用类别:
1、新扩展的类和原类重名,但是还需要原类中的方法。
2、扩展类的属性。
两种情况只能使用类别,而不能使用继承:
1、针对系统的类,如NSString、NSArrray等,系统本身是不提倡继承去扩展,因为这些类内部实现对继承有限制。
2、对自己构建的类,把相关的方法分组到多个单独的文件中,有助于维护。