ios category和extension的区别
发布网友
发布时间:2022-05-07 23:24
我来回答
共2个回答
热心网友
时间:2023-11-20 03:52
category 可以不用继承系统类,直接给系统添加新的方法,最大程度的体现了oc语言的动态语言特性。
注意:1.category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用category的方法时,继承树没有找到该方法的实现,程序就会崩溃。
2.category不能添加成员变量,但是可以使用@dynamic弥补这种不足。(既运行时runtime)
extension非常像没有命名的类别。
注意:extension中的方法必须在@implementation中实现,否则会编译报错。
类别是类的扩展,只可以声明方法,不可以声明变量,类别的方法优先级较高,可覆盖原类方法。
类别的方法中,不可以调用super方法。
使用情景:1.对框架提供类的扩展。
2.不想生成一个新的子类的情况下,比如对NSArray的扩展。
扩展:某些情况下,我们需要声明一个@property,它对外是只读的,而对内是可读可写的,这时,可以通过extension实现。
热心网友
时间:2023-11-20 03:53
Extension:拓展。一般的时候,Extension都是放在.m文件中@implementation的上方声明,且声明的是方法的话,必须在@implementation中实现,否则编译会报警告。
Category:分类。一般来说,只可以声明方法,不可以添加属性。除非使用Runtime运行时机制。分类的命名规则为:“”本类名+类别名“。可以在不新建子类的前提下进行本类的”“拓展”“,并且拥有自己的类名。
热心网友
时间:2023-11-20 03:52
category 可以不用继承系统类,直接给系统添加新的方法,最大程度的体现了oc语言的动态语言特性。
注意:1.category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用category的方法时,继承树没有找到该方法的实现,程序就会崩溃。
2.category不能添加成员变量,但是可以使用@dynamic弥补这种不足。(既运行时runtime)
extension非常像没有命名的类别。
注意:extension中的方法必须在@implementation中实现,否则会编译报错。
类别是类的扩展,只可以声明方法,不可以声明变量,类别的方法优先级较高,可覆盖原类方法。
类别的方法中,不可以调用super方法。
使用情景:1.对框架提供类的扩展。
2.不想生成一个新的子类的情况下,比如对NSArray的扩展。
扩展:某些情况下,我们需要声明一个@property,它对外是只读的,而对内是可读可写的,这时,可以通过extension实现。
热心网友
时间:2023-11-20 03:53
Extension:拓展。一般的时候,Extension都是放在.m文件中@implementation的上方声明,且声明的是方法的话,必须在@implementation中实现,否则编译会报警告。
Category:分类。一般来说,只可以声明方法,不可以添加属性。除非使用Runtime运行时机制。分类的命名规则为:“”本类名+类别名“。可以在不新建子类的前提下进行本类的”“拓展”“,并且拥有自己的类名。
热心网友
时间:2023-11-20 03:52
category 可以不用继承系统类,直接给系统添加新的方法,最大程度的体现了oc语言的动态语言特性。
注意:1.category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用category的方法时,继承树没有找到该方法的实现,程序就会崩溃。
2.category不能添加成员变量,但是可以使用@dynamic弥补这种不足。(既运行时runtime)
extension非常像没有命名的类别。
注意:extension中的方法必须在@implementation中实现,否则会编译报错。
类别是类的扩展,只可以声明方法,不可以声明变量,类别的方法优先级较高,可覆盖原类方法。
类别的方法中,不可以调用super方法。
使用情景:1.对框架提供类的扩展。
2.不想生成一个新的子类的情况下,比如对NSArray的扩展。
扩展:某些情况下,我们需要声明一个@property,它对外是只读的,而对内是可读可写的,这时,可以通过extension实现。
热心网友
时间:2023-11-20 03:53
Extension:拓展。一般的时候,Extension都是放在.m文件中@implementation的上方声明,且声明的是方法的话,必须在@implementation中实现,否则编译会报警告。
Category:分类。一般来说,只可以声明方法,不可以添加属性。除非使用Runtime运行时机制。分类的命名规则为:“”本类名+类别名“。可以在不新建子类的前提下进行本类的”“拓展”“,并且拥有自己的类名。
热心网友
时间:2023-11-20 03:52
category 可以不用继承系统类,直接给系统添加新的方法,最大程度的体现了oc语言的动态语言特性。
注意:1.category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用category的方法时,继承树没有找到该方法的实现,程序就会崩溃。
2.category不能添加成员变量,但是可以使用@dynamic弥补这种不足。(既运行时runtime)
extension非常像没有命名的类别。
注意:extension中的方法必须在@implementation中实现,否则会编译报错。
类别是类的扩展,只可以声明方法,不可以声明变量,类别的方法优先级较高,可覆盖原类方法。
类别的方法中,不可以调用super方法。
使用情景:1.对框架提供类的扩展。
2.不想生成一个新的子类的情况下,比如对NSArray的扩展。
扩展:某些情况下,我们需要声明一个@property,它对外是只读的,而对内是可读可写的,这时,可以通过extension实现。
热心网友
时间:2023-11-20 03:53
Extension:拓展。一般的时候,Extension都是放在.m文件中@implementation的上方声明,且声明的是方法的话,必须在@implementation中实现,否则编译会报警告。
Category:分类。一般来说,只可以声明方法,不可以添加属性。除非使用Runtime运行时机制。分类的命名规则为:“”本类名+类别名“。可以在不新建子类的前提下进行本类的”“拓展”“,并且拥有自己的类名。
热心网友
时间:2023-11-20 03:52
category 可以不用继承系统类,直接给系统添加新的方法,最大程度的体现了oc语言的动态语言特性。
注意:1.category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用category的方法时,继承树没有找到该方法的实现,程序就会崩溃。
2.category不能添加成员变量,但是可以使用@dynamic弥补这种不足。(既运行时runtime)
extension非常像没有命名的类别。
注意:extension中的方法必须在@implementation中实现,否则会编译报错。
类别是类的扩展,只可以声明方法,不可以声明变量,类别的方法优先级较高,可覆盖原类方法。
类别的方法中,不可以调用super方法。
使用情景:1.对框架提供类的扩展。
2.不想生成一个新的子类的情况下,比如对NSArray的扩展。
扩展:某些情况下,我们需要声明一个@property,它对外是只读的,而对内是可读可写的,这时,可以通过extension实现。
热心网友
时间:2023-11-20 03:53
Extension:拓展。一般的时候,Extension都是放在.m文件中@implementation的上方声明,且声明的是方法的话,必须在@implementation中实现,否则编译会报警告。
Category:分类。一般来说,只可以声明方法,不可以添加属性。除非使用Runtime运行时机制。分类的命名规则为:“”本类名+类别名“。可以在不新建子类的前提下进行本类的”“拓展”“,并且拥有自己的类名。