category
中文意思为:分类、种类,顾名思义就是将一个东西更好的分类便于管理。
extension
中文意思为:扩大、伸展,同理、它更侧重的是对一个东西的扩展。
先从外部看,当你创建一个类的category时,系统会生成两个文件,"category的类的类名+你定义的匿名.h与.m"而extension只会生成一个“extension类的类名_你定义的匿名.h”为什么后者没有.m文件,这个稍后给大家 解释。
下面我们往内部看,category文件的.h与.m文件的interface与implementation后都是跟category的类的类名+(你定义的匿名),而extension文件的interface是extension的类的类名+()且没有.m文件。应用场景还没有想到,因为开发中还未用到过,如果有用到过的可以留言告知一下,欢迎大家踊跃说出自己的想法和认知。
肤浅的我们介绍完了,下面开始介绍特性上的区别了。
category是在原有的类的基础上添加方法,不可声明变量。可以不知道category的类的.m文件,主要应用场景为后期项目需要添加新功能或者其他特性。
extension是在原有类上面进行扩展,可添加方法与变量声明,但是方法的实现要在extension的类的.m文件中实现。所以必须要知道extension类的.m文件,不然无法对扩展的方法和变量进行实现和初始化。
由于博客写的匆忙,可能介绍的不是很明白,下面我大致总结一下
category:
文件名上:category的类的类名+你定义的匿名.h与.m
内部定义上:category文件的.h与.m文件的interface与implementation后都是跟category的类的类名+(你定义的匿名)
特性上:添加方法,不可声明变量。可以不知道category的类的.m文件
extenson:
文件名上:“extension类的类名_你定义的匿名.h
内部定义上:extension的类的类名+()且没有.m文件
特性上:可添加方法与变量声明,但是方法的实现与变量的声明要在被extension的类的.m中实现,所以必须要知道extension类的.m文件
鉴于有的博客中写category只可添加方法不可删除方法这个区别本人不甚认同,这个需要特定条件的,因为extension的方法的添加与删除以及修改都是在知道.m的情况下,如果category知道被category的.m文件一样可以做相关的删除与修改,所以我觉得这个不应该作为两者的区别来看待的,鉴于这种说法网上流传较多,本人在此声明一下以免和我一样的菜鸟再看到之后误入歧途,我强烈希望大家能够在写博客的时候尽可能的保证自己信息的正确性,不喜欢人云亦云。欢迎大家对我进行指正和批评。