1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 在 Objective-C 中,分类(Category)和扩展(Extension)都是用来在现有类中添加额外功能的机制,但它们有一些关键的区别:
1-可见性和命名空间:
1.1-分类(Category): 分类允许你在不修改原始类声明的情况下向现有类添加方法。 这些方法在使用时与原始类中的方法没有区别,因此分类可以用来给类添加新的功能, 也可以用来将类的相关方法进行分组。 1.2-扩展(Extension): 扩展是一种匿名的分类,它允许你在类的实现文件(.m 文件)中声明私有的实例变量和私有方法。 扩展的主要目的是提供一种方式来隐藏类的私有实现细节,它们通常被用于声明私有的方法或者只在类的实现中使用的方法。
2-作用域:
2.1-分类(Category): 分类的方法可以被其他类调用,因此它们的作用域是全局的。 你可以在任何文件中导入分类的头文件,并且调用其中的方法。 2.2-扩展(Extension): 扩展中声明的方法和实例变量只能在类的实现文件中被访问,因此它们的作用域是局部的。 扩展一般会被定义在类的实现文件中,并且不会暴露给其他类。
3-实例变量:
3.1-分类(Category): 分类不能添加实例变量。你只能添加方法,不能添加成员变量。 3.2-扩展(Extension): 扩展可以添加实例变量,但是只能在类的实现文件中添加,并且只能添加在类的扩展声明中,而不能添加在分类中。
综上所述,分类和扩展都是用来扩展现有类的功能,但是它们的作用和用法有所不同。 分类主要用于向现有类添加方法,而扩展主要用于隐藏类的私有实现细节和声明私有方法
|