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

前言:

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

相关文章

来自专栏向治洪

Android热修复技术总结

插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高级开发中必须掌握的技能,插件化的知识可以查我我之前的介绍:Android插件化。本...

2866
来自专栏嵌入式程序猿

教你MODBUS程序符合MISRA规则

做嵌入式开发的广大工程师应该对MISRA C不陌生,他是Motor Industry Software Reliability Association 的缩写,...

1493
来自专栏PHP在线

什么是堆和栈,它们在哪儿?

问题描述 编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。...

3545
来自专栏祝威廉

Spark Tungsten in-heap / off-heap 内存管理机制前言

分析方式基本是自下而上,也就是我们分析的线路会从最基础内存申请到上层的使用。我们假设你对sun.misc.Unsafe 的API有一些最基本的了解。

1153
来自专栏Crossin的编程教室

【每日一坑 4】 查找文件

上一个坑,取出字符串中的数字,在论坛上出现了好几种方法。除了基本的遍历判断来做外,还有一些简便的python解法: 1.正则 ''.join(re.findal...

2787
来自专栏Java帮帮-微信公众号-技术文章全总结

轻松学,Java 中的代理模式及动态代理【面试+工作】

代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。

1493
来自专栏蓝天

cgroup初步分析(1)

cgroup的功能和作用不废话,直说一下cgroup的几条设计准则,有了几条设计准则的约束,就比较容易理解其中的数据结构和函数,至于源代码cgroup.c,无非...

1161
来自专栏JavaEdge

Java Fork Join 框架Doug Lea 关于Java 7引入的他写的Fork/Join框架的论文0. 摘要1. 简介2. 设计3. 实现

3058
来自专栏向治洪

Android热修复技术总结

插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高级开发中必须掌握的技能,插件化的知识可以查我我之前的介绍:Android插件化。本...

3597
来自专栏北京马哥教育

原来 Python 还有这些实用的功能和特点!

在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性。一些可以说是非常有用,但却没有充分利用。考虑到这一点,我编辑了一些你应该了解的Pytho...

1202

扫码关注云+社区

领取腾讯云代金券