问问题描述
答精选答案

分类(Category)和扩展(Extension)是Objective-C中用于扩展类能力的两种机制,它们的主要区别如下:
命名 :
分类在声明时必须使用分类名称,扩展则没有名称。
添加内容 :
分类原则上只能增加方法,但可以通过关联属性间接增加属性。
扩展不仅可以增加方法,还可以增加实例变量(或属性),且这些变量默认是私有的。
实现 :
分类中添加的方法必须实现,否则编译器会报错。
扩展中声明的方法可以不实现,因为它们会在对应类的实现部分实现。
访问权限 :
分类中添加的方法可以访问原类中的@public和@protected成员变量。
扩展中添加的方法和成员变量是私有的,只能在扩展类中调用。
编译与运行时 :
扩展在编译阶段添加到类中,而分类是在运行时动态添加到类中。
文件结构 :
分类创建完成后有两个文件(.h和.m),分别存放声明和实现。
扩展创建完成后只有一个文件,通常在.m文件中实现。
对系统类的影响 :
分类常用于给系统类添加自定义方法。
扩展可以用于给任何类添加方法和属性,包括系统类。
结构体 :
分类的底层结构体`struct _category_t`中没有成员变量列表,所以不能声明成员变量。
扩展的底层结构体中可以有属性列表,可以声明属性,但只会生成对应的get和set声明,没有实现。
总结来说,分类和扩展都是用于在不修改原有类的基础上扩展类的能力,但扩展提供了更多的灵活性,包括添加私有成员变量和方法,而分类则更适用于给系统类添加方法。需要注意的是,分类和扩展在Objective-C中是不同的概念,尽管扩展可以看作是分类的一个特例(匿名分类)
本文来自作者[abdc]投稿,不代表公众科技网立场,如若转载,请注明出处:https://www.cpst.net.cn/jiaoyuchangshi/202609/2161371.html
评论列表(4条)
我是公众科技网的签约作者“abdc”!
希望本篇文章《分类和扩展有什么区别》能对你有所帮助!
本站[公众科技网]内容主要涵盖:教育咨询,知识百科
本文概览:分类(Category)和扩展(Extension)是Objective-C中用于扩展类能力的两种机制,它们的主要区别如下:命名 : 分类在声明时必须使用分类名称,扩展则没有名称。添加内容 : 分类原则上只能增加方法,但可以通过关联属性间接增加属性。 扩展不仅可以增加方法,还可以增加实例变量(或属性),且这些变量默认是私有的。实现 : 分类中添加的方法必须实现,否则编译器会报错。 扩展中声明的方法可以不实现,因为它们会在对应类的实现部分实现。访问权限 : 分类中添加的方法可以访问原类中的@public和@