美文网首页
iOS分类(类别)的注意点

iOS分类(类别)的注意点

作者: FuWees | 来源:发表于2019-08-06 16:36 被阅读0次

1.分类只能增加方法(包括类方法和对象方法),不能增加成员变量

2.在分类方法的实现中可以访问原来类中的成员变量;

3.分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法(+load除外),导致原来的方法无法再使用(警告);
着重说下这个,尽量不要在分类中重写原类的方法,理由如下:
(1)、category没有办法去代替子类,它不能像子类一样通过super去调用父类的方法实现。如果category中重写覆盖了当前类中的某个方法,那么这个当前类中的原始方法实现,将永远不会被执行,这在某些方法里是致命的,但是如果子类实现了该方法,则子类的方法会覆盖掉分类和父类。(ps:这里提一下,+(void)load方法是一个特例,它会在当前类执行完之后再在category中执行。)

+(void)load方法,执行顺序:先调用父类,再调用子类,最后调用分类。

其他方法执行顺序:有子类则只执行子类,没有子类则只执行分类。

(2)、同时,一个category也不能可靠的覆盖另一个category中相同的类的相同的方法。例如UIViewController+A与UIViewController+B,都重写了viewDidLoad,我们就无法控制谁覆盖了谁。
(3)、通过观察头文件我们可以发现,Cocoa框架中的许多类都是通过category来实现功能的,可能不经意间你就覆盖了这些方法中的其一,有时候就会产生一些无法排查的异常原因。
(4)、category的诞生只是为了让开发者更加方便的去拓展一个类,它的初衷并不是让你去改变一个类。
结论:
当我们需要重写方法时,首推通过子类重写父类的方法,在一些不方便重写的情况下,我们也可以在category中用runtime进行method swizzling(方法的偷梁换柱)来实现。

4.方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;

5.在很多的情况下,往往是给系统自带的类添加分类,如NSObject和NSString,因为有的时候,系统类可能并不能满足我们的要求。

6.在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。

相关文章

  • iOS分类(类别)的注意点

    1.分类只能增加方法(包括类方法和对象方法),不能增加成员变量 2.在分类方法的实现中可以访问原来类中的成员变量;...

  • iOS分类、延展和子类的区别

    iOS分类、延展和子类的区别 类别、延展、子类的区别 | 类别 | 延展 | 子类--------|-------...

  • 2-1 分类 类后面加括号

    1.什么是分类 = 类别。通过runtime将方法添加进 类里面 iOS-分类(Category)[https:...

  • iOS 类别(分类)添加属性

    一:首先介绍Category好处: 1、可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框...

  • OC中常见的分类

    转载自CSDN 二 iOS常见分类 一些必要的类别iOS开发。包括的NSDate,的NSString,NSUser...

  • OC底层原理13-类的加载(二)

    iOS--OC底层原理文章汇总[/p/14911da92f74] 本文继续研究类的加载--分类(类别)。 分类Ca...

  • 分类、类别

    分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体的指针。原则上它只能增加方法,不能增加成员...

  • iOS小知识点02

    iOS分类(Category) Category的作用:为没有源代码的类添加方法。使用Category需要注意的点...

  • 逻辑回归(三)

    多类别分类(Multiclass Classification) 在多类别分类问题中,我们的训练集中有个多个类别,...

  • iOS 类扩展和分类(类别)

网友评论

      本文标题:iOS分类(类别)的注意点

      本文链接:https://www.haomeiwen.com/subject/zzjwdctx.html