分类和扩展有什么区别

问问题描述

分类和扩展有什么区别,蹲一个懂行的,求解答求解答!

答精选答案

最佳答案

分类(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

赞 (0)

发表回复

本站作者后才能评论

评论列表(4条)

  • abdc
    abdc 2026年09月30日

    我是公众科技网的签约作者“abdc”!

  • abdc
    abdc 2026年09月30日

    希望本篇文章《分类和扩展有什么区别》能对你有所帮助!

  • abdc
    abdc 2026年09月30日

    本站[公众科技网]内容主要涵盖:教育咨询,知识百科

  • abdc
    abdc 2026年09月30日

    本文概览:分类(Category)和扩展(Extension)是Objective-C中用于扩展类能力的两种机制,它们的主要区别如下:命名 : 分类在声明时必须使用分类名称,扩展则没有名称。添加内容 : 分类原则上只能增加方法,但可以通过关联属性间接增加属性。 扩展不仅可以增加方法,还可以增加实例变量(或属性),且这些变量默认是私有的。实现 : 分类中添加的方法必须实现,否则编译器会报错。 扩展中声明的方法可以不实现,因为它们会在对应类的实现部分实现。访问权限 : 分类中添加的方法可以访问原类中的@public和@

联系我们

联系:143 0457 151

工作时间:周一至周五,9:30-18:30,节假日休息

关注我们