前言:
这篇文章即是技术篇又是跟项目架构设计相关的文章,(个人是这样感觉的),一直在搜集和总结产品架构方面的技术和技巧,很多时候都是自己知道,但是不知道怎么写出来,恰好看到一篇别人的文章就借机在今天就简述下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 方法的文章