iOS中什么是耦合度

最近刚好在找工作,其实很多公司在面试的时候会问一些问题,比如问到我一个问题是假如有多个异步下载任务同时进行,你需要显示当前全部任务的下载进度你将如何实现。我选择的是用线程组来统计,每个线程都有一个对应的变量float值来保留线程的下载进度,为了不频繁的计算下载进度,我选择用GCD的循环来定时做计算来显示下载的进度。对方就问我了,每个线程都有一个变量的话,那势必都在一个方法里,那么后期维护将会很麻烦,有没有更好的办法,当时我有点懵,不知道怎么回答,其实这涉及到代码的耦合度和繁重问题。其次很多公司也会问你有哪些优化代码的方法,或者哪些代码规范,为什么要这样规范,我平时自己写代码有一套自己的习惯,但是自己没有去深究,甚至说代码的耦合度其实也有尽量降耦合,但是真的要说起来我都有哪些技巧,却一个都说不出来。就像自己有点小经验,但是却不知道所以然来,所以我特意去学习了一下什么是耦合度以及降耦合的技巧。

耦合度的道理其实说起来很简单,就是模块之间相关联程度的度量,指模块与模块之间的关联性,所谓的低耦合就是将两个模块之间的关联性尽可能的降低,一个模块的改动对于其他模块的影响尽量小。这样的话看起来很明了,平时简单的功能做起来也不难,比如一些简单的低耦合技巧:给tableViewCell赋值的时候,如果有dataSource,那么有些人会在tableView的代理中从dataSource取出需要的数据来赋值给cell,这样就增大了主视图的代码,增大了cell和主视图的联系,这时候就可以改为将dataSource里面的Model赋值给cell并重写setModel方法来实现低耦合。

那么那些平时不明显的高耦合都有哪些?

例如短信备份时,短信备份的代码是由A程序员写的,界面的UI是由B程序员写的,这时客户要求加一个进度条对话框,A程序员提供一个普通方法,B把ProgressDialog对象传进去,由A给进度条设置最大值,以及备份过程的进度,从而达到显示进度的效果,如果客户又要求ProgressDialog太丑了,要换成ProgressBar,此时A和B都要修改代码,代码的耦合度太高,可以由A提供一个回调函数,B只需根据回调函数进行处理,从而降低代码的耦合度,所以代理可以有效的降低代码的耦合度,就如何系统原生的tableView的列表视图,也是为什么tableView可以直接设置rowHeight以及代理中可以设置了,这都是为了低耦合的处理。

另外,再分享一些降低耦合的方法:1、少使用类的继承,多用接口隐藏实现的细节。2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。3、遵循一个定义只在一个地方出现。4、少使用全局变量。5、类属性和方法的声明尽量在.m中。 6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。7、最后当然就是避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。

最后值得注意一点,一定要少使用Runtime这种黑魔法技巧,因为它的巧妙会避开程序crash导致到你完全不能够发现问题所以,这一点一定要切记!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • □图文/小品味 【连载】凤尾穴之滨江奇缘(第七章梨花春景) 阳春三月,百花盛开,梨花村迎来了一年四季最美的时节。万...
    小品味阅读 4,030评论 0 1
  • 白天,只是排练, 疑心四处蔓延。 我们颂咏着各自的咒语, 在舞台上旋转。 灯光, 夹带着晚云,倾泻而下。 时间, ...
    洛_飞阅读 3,414评论 22 37
  • 十年前的一个初秋的夜晚,还在读书的我在广州的一个酒店里听一位江湖朋友讲自己的故事,不知不觉就听到了快十一点...
    岁末之下阅读 2,910评论 0 0
  • 看一本书就像见一个人。好书总会让人产生相见眼晚的感觉。 一切的缘起都是最初的相识,对我来说,选中一本书大多因为口碑...
    明媚月光阅读 4,429评论 5 12

友情链接更多精彩内容