美文网首页程序员iOS学习笔记iOS Developer
密语项目的一点思考,可能会帮到你

密语项目的一点思考,可能会帮到你

作者: Lefe | 来源:发表于2017-08-01 18:36 被阅读133次
  • 问题一:代码臃肿

看看密语目前的代码,各个文件纠缠不清。你说它是 MVC 模式吗,它也算是。只是有时候,为了方便把不该放的代码放到了不恰当的位置。导致某些类几千行的代码量,如果没有适当的注释或命名不太好理解,找一个文件很难,很难。有些可能按照我们规定的方式对代码有一个基本的组织:

#pragma mark - ViewController life cycle

#pragma mark - LoadData

#pragma mark - Action

#pragma mark - Notification

#pragma mark - UITableViewDelegate

#pragma mark - CreateUI

#pragma mark - Helper

这样找到某个方法还好点。所以我们要不断优化自己的代码。

  • 问题二:Block 嵌套太深

如今我们面临一个问题,Block 回调嵌套太多,比如多个网络请求依次请求,比如发动态,发事件,都是先上传附件,后面进行网络请求,像这种方式使用 Block 就会引发回调地狱的问题。那么如何解决?

  • 问题三:性能问题

解决问题的方式很多,需要找到一种最优的方法,需要使用合理的数据结构,或者某种算法可以帮我们解决复杂的问题。比如如何能减少网络请求的调用,什么地方使用数组,什么地方使用字典,为什么会有那么多的 for 循环,为什么会有那么多的 if 判断等等。那么如何解决?

  • 问题四:固有的思维模式

总是使用同一种方式来解决问题,其实有些方式是很多年前的方式,目前已经有很好的解决方案,总之需要不断学习。比如 AutoLayout 的使用,编译速度慢,Reveal 工具,等等,都可以提高我们的开发效率。

代码臃肿咋么办?

我们可以想一下,设计模式真的有用吗?目前有非常多的设计模式,比如 MVCMVPMVVM,这些真的有用吗?有用。那我们如果遇到一个比较复杂的业务场景,不妨试一试这种 MVVM 模式。它可以是代码维护更简单,而且有一种数据驱动 UI 的感觉。不过刚开始使用,需要不断的打磨。

屏幕快照 2017-08-01 下午5.24.50.png

各个模块主要的作用:

  • Controller 就是目前 MVC 中的 UIViewController;
  • View 一个 Controller 中会含有多个 View,每个 View 对应一个 ViewModel;
  • ViewModel 是 View 与 Model 中间的一个桥梁,负责传递数据及事件处理;
  • Model 就是目前 MVC 中的 Model;
  • Server 主要负责网络请求,和数据库操作;

需要注意的地方是,View 持有一个 ViewModel,ViewModel 持有一个 Model,不可逆向持有,否则打破了 MVVM 这种设计模式。

屏幕快照 2017-08-01 下午5.48.41.png

可能你会问 MTDataBinding,这个类是干什么用的。其实 MVVM 很重要的一环是数据绑定,什么意思呢?就是数据改变的时候,与之对应的 UI 也会发生改变。MVVM 中可以用作数据绑定的有 ReactiveCocoaRxSwift。可以做数据的单向和双向绑定。

Block 嵌套太深咋么办?

                                    });
                                });
                            });
                        });
                    });
                });
            });
        });
    });
});

Block 在 js 中和 callback(函数) 差不多,当然在 JS 中很容易出现这种回调地狱,不过人家支持 Promise,很好的解决了这个问题。其实 iOS 中 可以使用PromiseKit 来解决这个问题。相信不久后 Swift 也会支持异步编程。

PromiseKit 是一款 swift 编写的支持 iOS,macOS,tvOS,watchOS 等多平台的轻量级异步编程库,同时 PromiseKit 完美的支持了 Objective-C 桥接。

性能问题 咋么办?

提升用户体验,当然前提需要提升应用的性能。这就需要我们在写代码时不断的思考,而不是仅仅的完成功能。比如如何减少时间复杂度,如何合理的使用数据结构,比如 PhotoKit 中为什么会使用 PHFetchResult ,而不是数组。所以,如果遇到特殊的业务,是不是可以换一种数据结构,换一种思路呢。

===== 我是有底线的 ======
喜欢我的文章,欢迎关注我的新浪微博 Lefe_x,我会不定期的分享一些开发技巧

相关文章

  • 密语项目的一点思考,可能会帮到你

    问题一:代码臃肿 看看密语目前的代码,各个文件纠缠不清。你说它是 MVC 模式吗,它也算是。只是有时候,为了方便把...

  • [macOS] System Integrity Protect

    苹果从 OS 10.11 开始引入了一项保护机制 System Integrity Protection,目的是帮...

  • 坐等上帝的安排

    早上编一项目的招标文件,下午修改另一项目的招标文件,晚上从头开始编又一项目的招标文件。 时间来到晚上十一点,干不动...

  • 把问题写出来,然后再解决!

    有时候遇到问题我们总是盲目的就去做,一点思考的时间都没有,那这种情况,就有可能会导致在解决问题的时候不太顺手,想...

  • 工作与作业

    安排工作的时候,一开始就把目的交代清楚,决定这结果将会成为一项工作,还是成为一项作业。 让下属自己思考工作的目的,...

  • 关于教育目的一点思考

    教育的目的;教育的目标。 看似浅显的两个命题,其实深入进去,是关于人生意义,生命价值的思考。甚至,可以说是一个哲学...

  • 学习、思考、行动、改变

    学习,然后思考,思考之后开始行动,行动促成改变。只有四项做完了,我们才会慢慢地越来越好。 学习不是目的,思考不是目...

  • 思考&目的

    工作中,当有人找你主动聊起某件事情或者询问关于某些事情的意见时,需要在思考一下通过这次交流对方想得到什么。 ...

  • 永澄老师5月13日文章导图

    附上一点自己的小思考。 做事谈目的。行动前要有思路。

  • 目的和目标

    一点思考 关于目的和目标, 你是否觉得这两个是一个意思?如果不是你是否有思考过你做事的目的是什么?是否有思考过,你...

网友评论

    本文标题:密语项目的一点思考,可能会帮到你

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