美文网首页
由#import引发的一些思考

由#import引发的一些思考

作者: 冬季 | 来源:发表于2016-05-11 00:16 被阅读182次

中午吃饭和@赵总聊天,谈到了iOS项目中出现的关于不理性的import问题,以本文来聊一聊关于在一个工程中从import关系中如何找出一些设计上的问题

下面是个循环import的例子:

>>> A.h
#import "B.h"

@interface A : NSObject
@end

>>> B.h
#import "C.h"

@interface B : NSObject
@end

>>> C.h
#import "A.h"

@interface C : NSObject
@end

这种引用关系在很多工程中都有出现,我认为这种引用关系并不健康

效率

复杂的引用关系会在编辑工程时会严重拖慢编译效率,GCC编译的时候默认会缓存已编译过的文件,当再次编译时只编译相关的修改。当一个文件被修改时,所有#import该文件的文件都会被重新编译。所以当引用关系过于复杂的时候,每个修改都有可能下次大面积的重新编译。

架构

笔者认为从工程的架构来讲,树状关系更为合理。首先,循环import使代码变得更难读,当触及到实现代码的时候,很可能开发者要在相关联的几个文件中反复跳转,这种情况无疑增加了工程本身的理解成本。这种引用关系带来最严重的问题就是耦合性的问题,环状引用的关系就意味着环内的模块是有依赖关系的,而循环依赖的关系导致了代码中很大概率会出现比较严重的耦合。在面向对象编程中封装性是最重要的特点之一。当出现循环依赖的时候证明这段代码没有被合理的封装,进而,无论在移植还是扩展都会受到严重的制约。

方案

像上面提到的,一个健康的工程中,引入关系应该以树状引用为主。这种引用很容易可以将一个模块剥离出来,最简单的就是将文件中引用的子关系全部抽离出来就可以当作一个单独的模块进行使用,而环状引用中在环内每多一个节点就意味着有很多文件与当前模块耦合,而如果出现环环相扣的情况,当想从工程中抽离出某个模块的时候可能需要抽出半个工程来。

生活中很多时候也好像环状引用的代码一样,筋疲力尽之后才发现一直在原地转圈。转着转着,累了,迷惑了,彷徨了,或许最后就放弃了。像设计代码一样来设计生活,或者像设计生活一样来设计代码。我想,都会是一种精彩的体验。

太极生两仪,两仪生四象,四象生八卦,八卦生万物

相关文章

  • 由#import引发的一些思考

    中午吃饭和@赵总聊天,谈到了iOS项目中出现的关于不理性的import问题,以本文来聊一聊关于在一个工程中从imp...

  • 由汽车追尾引发的一些思考

    一大早,我们开车赶路。在某一个红绿灯路口停下来,只听砰得一声,汽车像跳迪斯科一样的扭动了一下,我下意识感到汽...

  • 由一些小问题引发的思考

    如何判断数组是否为空? c++实现 php实现 关于PHP的empty函数php-manual中这样解释:一下情况...

  • 由“整理衣服”引发的一些思考

    每年夏冬交替或春夏交替时,广东的家庭主妇们就要实施一年两度的衣物整理行动。广东的季节不是这么分明,你得考虑季节的多...

  • 由集成ARouter引发的一些思考

    引子 最近打算把项目的各个页面按模块的不同做拆分,也就是简单地想做下组件化的改造吧,那么这样一来不同模块的各个页面...

  • 由阅读困惑引发的一些思考~

    1.在读《世界哲学史》的过程中,很喜欢这本书的书写逻辑,想到将来等自己更博学一点,也许可以想写点阅读历程的文字。 ...

  • 由文字引发思考

    我是一个平常喜欢随意写点东西的假文艺青年,我喜欢文字,喜欢它的质感。我感觉语言并不能完全展现文字的美,...

  • 由听歌引发的思考

    上课前的几分钟,为了让我的学生们释放一下上节课的疲劳,我习惯提前进到教室,给他们放一首歌,中文或者英文都有。有一次...

  • 由错题引发的思考

    今天给孩子检查作业,他说:“别检查前面的”,觉得有猫腻,便我拿过来看看,吓一跳,前面的好多没做的,再细看惨不忍睹。...

  • 由听歌引发的思考

    在洗澡时,突然熟悉的旋律奏起,那是一首我所喜爱的火影主题曲,《closer》,我脑海中不由自主浮现出卡卡西鸣人佐助...

网友评论

      本文标题:由#import引发的一些思考

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