前述
我开发前,我首先要说的是,我的记录过程可能比较发散,遇到问题了可能就会大篇幅的说一下,也可能会简略过,希望见谅!
客户端搭建准备过程
客户端类型选择
现在的移动端开发类型主要就是三种:
- native-app
- web-app
- hybrid-app
native-app
原生应用程序:原生应用程序是某一个移动平台(比如iOS或安卓)所特有的,使用相应平台支持的开发工具和语言(比如iOS平台支持Xcode和Objective-C,安卓平台支持Eclipse和Java)。原生应用程序看起来(外观)和运行起来(性能)是最佳的。
web-app
HTML5应用程序使用标准的Web技术,通常是HTML5、JavaScript和CSS。这种只编写一次、可到处运行的移动开发方法构建的跨平台移动应用程序可以在多个设备上运行。虽然开发人员单单使用HTML5和JavaScript就能构建功能复杂的应用程序,但截至本文截稿时仍然存在一些重大的局限性,具体包括会话管理、安全离线存储以及访问原生设备功能(摄像头、日历和地理位置等)。
native-app
混合应用程序:混合应用程序让开发人员可以把HTML5应用程序嵌入到一个细薄的原生容器里面,集原生应用程序和HTML5应用程序的优点(及缺点)于一体。
在考虑到底是用那种类型的开发方式时,我们主要考量的就是我们的项目的功能和扩展性。而相对于自身来说,吐槽君并没有涉及到平台扩展,我也没有想让他衍生到其他平台。另外就是功能和性能的要求,项目中会涉及到录音和录像和播放功能,在这方面,原生开发有着不可动摇的位置。
所以,我选择原生开发。
语言选择
现在的iOS开发中主要有两种开发语言:
- Objective-C
- Swift
Objective-C
Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。
Swift
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,他的降临将重新定义软件开发。
Swift 的开发从很久之前就开始了。为了给 Swift 打好基础,苹果公司改进了编译器,调试器和框架结构。我们使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理。我们在 Foundation 和 Cocoa的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。
Objective-C 开发者对 Swift 并不会感到陌生。它采用了 Objective-C 的命名参数以及动态对象模型,可以无缝对接到现有的 Cocoa 框架,并且可以兼容 Objective-C 代码。在此基础之上,Swift 还有许多新特性并且支持过程式编程和面向对象编程。
在这里我选择的是oc。为什么选择他呢,主要是因为swift还在更新呐,不断地有新的方法出现而老的方法在更迭,实在是可用性低了点。相对于此,oc就很稳定了。
使用CocoaPods
第三方库索引
这里先大概的把我们以后要用到的三方库先都集成上去:
platform :ios, '8.0'
#use_frameworks!个别需要用到它,比如reactiveCocoa
target 'tucao' do
pod 'AFNetworking', '~> 3.1.0'
pod 'SDWebImage', '~>3.8'
pod 'MBProgressHUD', '~> 1.0.0'
pod 'Masonry', '~> 1.0.2'
pod 'MJExtension', '~> 3.0.13'
pod 'MJRefresh', '~> 3.1.12'
pod 'JKCategories', '~> 1.5'
pod 'RDVTabBarController', '~> 1.1.9'
pod 'Reachability', '~> 3.2'
end
- AFNetworking 网络请求框架,是对我们oc现有的官方的语言的二次封装,但是根据项目不同,到时候我们在对AFNetworking进行封装。
- SDWebImage 图片加载与缓存三方库,主要是用在了网路图片的请求与加载上面,突出的重点就是本地缓存和断点续传和二次加载的查找本地机制。
- MBProgressHUD 加载等待图,没啥说的
- Masonry 控件添加约束三方库,比较好用
- MJExtension json转模型三方库
- MJRefresh 下拉刷新、上拉刷新
- JKCategories 分类总结
- RDVTabBarController tabbar设置
- Reachability 网络状况
接下来就是
$ pod install
大功告成
项目框架规划
直接上图这是我比较喜欢的项目结构,也是我这几年用的比较顺手的。经典的MVC模式开发架构。
简单的介绍一下我的结构
- TCBase
控制器,网络请求,视图,模型的基类所在地,整合化一的去规划现有功能和相同和类似功能。更好的抽离出基类能够很好地控制代码的繁简度。
- 五大模块
我比较喜欢按照底部tabbar分化功能,简单明了,互不打扰。
- TCUtility
在这个模块中我主要是用来放一些三方库的二次封装和工具类。 - TCConfig
配置文件存放处。主要就是delegate文件和pch文件
在这里我想说一下关于pch文件的问题,现在很多人多说不建议用pch文件了,改用h文件进行导入,这样做的好处是避免了程序启动时的启动时间和性能优化。而我本身根据测试觉得并没有多大的影响,而且pch比h文件更方便的导入,何乐而不为。
讲一下pch文件如何导入:
- TCOther
这里存放的就是一些不会经常变得文件了
基础框架搭建完毕
接下来就是五大功能版块和工具类的封装和细化了。