- 问题一:代码臃肿
看看密语
目前的代码,各个文件纠缠不清。你说它是 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 工具,等等,都可以提高我们的开发效率。
代码臃肿咋么办?
我们可以想一下,设计模式真的有用吗?目前有非常多的设计模式,比如 MVC
,MVP
,MVVM
,这些真的有用吗?有用。那我们如果遇到一个比较复杂的业务场景,不妨试一试这种 MVVM
模式。它可以是代码维护更简单,而且有一种数据驱动 UI 的感觉。不过刚开始使用,需要不断的打磨。
各个模块主要的作用:
-
Controller
就是目前 MVC 中的 UIViewController; -
View
一个 Controller 中会含有多个 View,每个 View 对应一个 ViewModel; -
ViewModel
是 View 与 Model 中间的一个桥梁,负责传递数据及事件处理; -
Model
就是目前 MVC 中的 Model; -
Server
主要负责网络请求,和数据库操作;
需要注意的地方是,View 持有一个 ViewModel,ViewModel 持有一个 Model,不可逆向持有,否则打破了 MVVM
这种设计模式。
可能你会问 MTDataBinding
,这个类是干什么用的。其实 MVVM
很重要的一环是数据绑定,什么意思呢?就是数据改变的时候,与之对应的 UI 也会发生改变。MVVM
中可以用作数据绑定的有 ReactiveCocoa
和 RxSwift
。可以做数据的单向和双向绑定。
Block 嵌套太深咋么办?
});
});
});
});
});
});
});
});
});
});
Block 在 js 中和 callback(函数) 差不多,当然在 JS 中很容易出现这种回调地狱,不过人家支持 Promise,很好的解决了这个问题。其实 iOS 中 可以使用PromiseKit
来解决这个问题。相信不久后 Swift 也会支持异步编程。
PromiseKit 是一款 swift 编写的支持 iOS,macOS,tvOS,watchOS 等多平台的轻量级异步编程库,同时 PromiseKit 完美的支持了 Objective-C 桥接。
性能问题 咋么办?
提升用户体验,当然前提需要提升应用的性能。这就需要我们在写代码时不断的思考,而不是仅仅的完成功能。比如如何减少时间复杂度,如何合理的使用数据结构,比如 PhotoKit 中为什么会使用 PHFetchResult
,而不是数组。所以,如果遇到特殊的业务,是不是可以换一种数据结构,换一种思路呢。
===== 我是有底线的 ======
喜欢我的文章,欢迎关注我的新浪微博 Lefe_x,我会不定期的分享一些开发技巧