很多人可能会问 iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识;但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻。
这里就讲一下我自己的理解,但是这个理解也是集合了前辈的经验来的,只不过我用大白文再延伸一点。
对于类扩展,先看这段话:
我们定义类时,在.h里写的变量如果不是public一般不能被外部直接调用,如果我有的方法不想被外部调用只给内部使用呢?至此,延展出现。 其实,延展就是类似于“定义私有方法”的一种子类。
对于如何创建:
通过New File -> Objective-C extension来创建,比如我选择ASStudent类,延展名叫hello,那么会自动创建一个.h文件叫ASStudent_hello.h, 没有.m文件,因为可以直接在类的.m里写即可。
其实,对于只有.h文件这点,很多新人可能就比较疑惑,只有一个头文件,怎么和分类不一样?
这正是扩展的不一样,它会创建多一个头文件,我们在里面添加成员变量、属性、方法等;如果要实现,只需要在它要扩展的类 .m文件去实现即可。
有时候,我们网上查的资料,对于扩展介绍说很常见,我们可能会比较迷糊,不理解啊。。。
其实原理是这样:
a:其实我们可以不通过创建文件来创建延展,可以直接在.m文件里写@interface和@implementation, 注意这两个都要写在.m文件里,因为如果把@interface写在.h里,那么里面的方法都是public的;
b:此外,我们也可以直接省略@interface,直接在.m文件里写方法即可,但还是建议书写,这样的好处是至少阅读起来,可以在文件一开始的几行就告知了哪些是私有方法。
这正好解释了,为什么大神会说扩展其实无处不在了。
理解的浅薄,如有不对,欢迎留言。。
时间: 2024-10-22 21:52:54