iOS分类(category)、类扩展(extension)、继承的区别

如题所述

第1个回答  2022-07-14
iOS在2.0就已经推出分类(Category),它允许开发者在不改动原有类的情况下,对该类进行扩展使用。分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体的指针。原则上它只能增加方法,不能增加成员(实例)变量,具体原因看源码:

从中我们可以看出,这个结构体主要包含了分类定义的实例方法与类方法,其中 instance_methods 列表是 objc_class 中方法列表的一个子集,而 class_methods 列表是元类方法列表的一个子集。但这个结构体里面根本没有属性列表。

对于继承,应该都是很熟悉了,网上详细的资料也是非常多,在这里就不再赘述,主要介绍它与分类的区别。

iOS分类(category)、类扩展(extension)、继承的区别
iOS在2.0就已经推出分类(Category),它允许开发者在不改动原有类的情况下,对该类进行扩展使用。分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体的指针。原则上它只能增加方法,不能增加成员(实例)变量,具体原因看源码:从中我们可以看出,这个结构体主要包含了分类定义的实例方法与...

iOS中分类(Category)、扩展(Extention)和继承(Inheritence)的区别?
       iOS中的extension就是匿名的分类,只有头文件没有实现文件。只能扩展方法,不能添加成员变量。扩展的方法只能在原类中实现。例如你扩展NSString,那么你只能在NSString的.m实现(这是不可能的),所以尽量少用扩展。用分类就可以了。继承:    ...

谈谈iOS中Categories,Extensions和继承的区别
Category methods可以做任何在类中正常定义的方法能做的事。在运行时,没有任何区别。通过category 增加到类中的方法会被这个类的所有子类继承,就和此类的其它方法一样。Category的声明看赶来和一个interface的声明非常相似(除了category的名字要列在类名后的括号里和没有指明超类之外)。除非它的方法不会...

iOS中分类和继承的区别
        继承与分类最大的区别是,一般情况下,分类不能扩展属性,继承可以扩展属性。但有一种情况下,分类可以扩展属性,那就是在本类中写的分类。         这里解释下,属性与成员变量的关系。        属性...

类别(category)和类扩展(extension)的区别。
category和extensions的不同在于 后者可以添加属性。具体的可以请教猿人部落APP里的大神了。

objective-c中类别和类扩展的区别
在iOS中,有一种机制可以使用户在没有远吗的情况下扩展类的功能,但不是通过继承,这就是类别。iOS中没有类似C++中可以定义私有方法和私有变量的关键字,要定义私有方法和私有变量,可以用类扩展来实现。类别 类别在不需要继承的情况下可以扩展类的功能。但类别不能添加类的属性和私有变量。类别可以用来...

category是什么?扩展一个类的方式用继承好还是类目好?为什么
Category是类目。用类目好,因为继承要满足a is a b的关系,而类目只需要满足a has a b的关系,局限性更小,你不用定义子类就能扩展一个类的功能,还能将类的定义分开放在不同的源文件里, 用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。4、延展是什么?作用是...

iOS类别扩展和匿名类别扩展的区别
最大的区别是匿名类别扩展可增加属性,类别扩展不可以(当然通过一些黑魔法可以实现同样的效果)。

iOS面试题有哪些
iOS 面试题 1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?答:不可以,可以实现多个接口;category是分类,,一般情况下分类好,用category重写只会影响到分类本身,不影响其他类和原有类的关系。2.#import 跟#include 又什么区别 ...

iOS 中的协议 — @protocol
协议与 Category 的区别 :category是针对类进行扩展,而且该类必须有里面的所有成员,协议不同可以选择性实现;category是针对一个具体的类实现,其他类没有,协议允许任何类使用并实现;Category由本身实现,不允许其他类重写,协议只定义方法,无具体实现任何类允许自己实现;category被单继承的特性所限制,...

相似回答
大家正在搜