摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 记得刚开始做软件开发的时候,我的导师就在一次函数设计的时候说:“函数粒度很重要,但即使我做了接近二十年的软件,有时也无法很好把握粒度。这点就只可 意会不可言传了。”这句话可能一部分是出自谦虚,但更多是道出软件开发的规律。当时我们无法去理解,现在开始慢慢理解。我们设计一个函. 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 代码重复是一个比较明显的“坏味道”,提取公用的方法就是解决的途径之一。iPhone开发中,使用UITableView的时候就有如下一段“经典”的 模板代码,因为这是项目模板自动生成的,所以很多人就自然接受了。但随着越来越多地通过copy&paste在一个项目中使用这 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 在代码实现的过程中经常会遇到这样的情况:有些条件分支的判断中最初还比较简单,但随着需求不断修改以及检查不断细化,分支条件会不断地变复杂,以至于开始影响到主要代码流程。面对这种情况,就应该将分支条件进行提取来实现其固化。重构前后代码如下:重构前:- (BOOL)webVie. 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 写代码有时和说话一样,要体现层次感,可能是首先罗列要点,然后再逐点细化。但如果时而说要点,时而谈细节,就会造成听者理解上的障碍。如下的代码就会有这样的一个问题:重构前:- (UITableViewCell *)tableView:(UITableView *)tableV. 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 使用Objective-C的人应该都很熟悉通过alloc和init进行对象的“两阶段”创建。其实利用new的一次创建也是可以的,但由于“两阶段” 创建所具备的灵活性使得其成为了Objective-C创建对象的一种惯例。但真正使用的时候,开发人员有时更倾向与一些创建的辅助方. 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 在iPhone开发的过程中经常会遇到根据不同的Table行或者标识符推入不同的Controller的需要,一个最直接的实现就是硬编码,通过if…else if…else或者switch…case…实现,代码如下:重构前: - (void)pushViewControll.. 阅读全文
摘要:
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。 在一个应用中,不同地方所需要的内嵌网页浏览器,在iPhone可能就需要若干 个使用UIWebView的Controller(如下图)。这些Controller往往都有一些共通的行为,比如加载的时候会显示加载进度并在状态栏 显示网络状态图标,加载完毕后隐藏进度和网络状态显示. 阅读全文