load方法简化类的负载、结构化工程

2018-09-12 18:33:46 浏览数 (1)

前言:

这篇文章即是技术篇又是跟项目架构设计相关的文章,(个人是这样感觉的),一直在搜集和总结产品架构方面的技术和技巧,很多时候都是自己知道,但是不知道怎么写出来,恰好看到一篇别人的文章就借机在今天就简述下load方法在简化类的负载、结构化工程方面的实践吧!在原文作者的基础上,我又亲测后添加了一些新的知识,大家比较后就会发现的,文章最后会附出我布局这篇文章的原文出处。


场景:

有时候一个比较大型的项目(是比较大型,算是中小型)中的AppDelegate类中是这样的

Paste_Image.png

这还不算多的,有的可能更多,那么有没有什么方法可以简化AppDelegate 的设置呢?

思路

  • 类别的一个作用就是类的分散实现,我们可以使用类别,对AppDelegate 扩充,这样就可以把原本堆在一起的代码分散到几个类中实现,管理起来比较简单,而且增加代码的可读性
  • 在Objective-C中,绝大多数类都继承自NSObject这个根类,而该类及其子类有load方法,可以用来实现初始化操作。对于加入运行期系统中的每个类(class)及分类(category)来说,必定会调用此方法,而且 load 方法不会被类自动继承, 每一个类中的 load 方法都不需要像 viewDidLoad 方法一样调用父类的方法
  • 而且是程序启动时,优先加载完所有类的 +load()方法,就算没有导入头文件,只要存在工程中会自动调用,这就是 +load()方法的神奇之处,那篇文章中,作者有几个地方说的是有些不正确的。
并没有导入头文件,依然会执行

Paste_Image.png

Paste_Image.png

解决方案

Snip20161111_3.png

Snip20161111_4.png

Snip20161111_5.png

这里需要说一下,并不用导入两个 对应的头文件也可。

注意事项
  • 与其他方法不同,load方法不参与覆写机制
  • load方法实现得精简一些,有助于保持应用程序的响应能力
  • initialize方法 ,它是“惰性”调用的,也就是说,只有当程序用到了相关的类时,才会调用。因此,如果某个类一直都没有使用,那么其initialize方法就一直不会运行。这也就等于说,应用程序无须先把每个类的initialize都执行一遍,这个算是 load方法的补充了。
  • initialize方法 对于每个类来说在整个app的生命周期里都只会执行一次,不管之后调用多少次,也就只执行一次,这个和 +load方法的特性是一样的**
  • initialize方法 和 +load方法 对于单个类来说,写在类别中的话, +load方法 只会被调用一遍,而 initialize方法 的调用次数会和整个工程中对应的这个类的文件个数一致(有多少个对应的类,在这个类被调用到时,这个类的类别中的 initialize方法会被调用多少次)

我阅读的那篇文章的链接

我的另一篇有关+load 方法的文章

0 人点赞