Dav*_*ong 101
类别是一种向现有类添加方法的方法.它们通常驻留在名为"Class + CategoryName.h"的文件中,如"NSView + CustomAdditions.h"(当然还有.m).
类扩展是一个类别,除了2个主要区别:
该类别没有名称.声明如下:
@interface SomeClass ()Run Code Online (Sandbox Code Playgroud) @结束- (void) anAdditionalMethod;
扩展的实现必须位于文件的主要@implementation块中.
在.m文件顶部看到一个类扩展,在类上声明更多方法,然后在类的主@implementation部分实现,这是很常见的.这是一种声明"伪私有"方法的方法(伪私有方式,因为它们不是真正的私有,只是没有外部暴露).
Anu*_*uni 45
类别
=>在Objective C中,当您想要为没有继承的类添加更多功能时,您只需使用类别即可.
=>它带有自己的.h和.m文件
=> Category用于添加新方法而不是属性.
类扩展
- >在Objective C中,当您想要将某些属性的行为设为私有时,您可以使用类扩展.
- >它只附带.m文件.
- >主要用于物业.
注意:当我们添加一个新文件并选择一个目标c类别的选项时,它会显示类别和"类别"而不是"子类",所以它显示为
@interface className (categoryName)
@end
Run Code Online (Sandbox Code Playgroud)
- 你将获得两个文件 名为.h和.m的文件名为(className + categoryName.h和className + categoryName.m)
在扩展的情况下,你会得到
@interface className()
@end
Run Code Online (Sandbox Code Playgroud)
- 您将只获得一个名为className_extensionName.h的文件
Ven*_*ari 31
类别是一种向类添加方法的方法,无论源代码是否可用,这意味着您可以将类别添加到基础类中NSString,也可以添加到您自己的自定义类中.
扩展只能添加到源代码可用的类中,因为编译器同时编译源代码和扩展.
我们可以在类扩展中添加额外的实例变量和属性,但不能在类别中添加.
扩展内的任何变量和方法甚至不能被继承的类访问.
类别和扩展都基本上用于处理大型代码库,但类别是一种在多个源文件中扩展类API的方法,而扩展是一种在主接口文件之外添加所需方法的方法.
当您必须根据不同的功能将相同的类代码分成不同的源文件时使用类别,以及当您只需要在主接口文件外部的现有类中添加一些必需的方法时使用扩展.此外,当您需要在类中修改公开声明的实例变量(例如,readonly to readwrite)时,您可以在扩展中重新声明它.
扩展:使方法私有并添加我们自己的自定义类的属性,而不是 Apple 类的属性。
类别:要在现有类中添加更多方法而不是属性,它可以用于自定义类和 Apple 类,如NSString.
| 归档时间: |
|
| 查看次数: |
49097 次 |
| 最近记录: |