前述
我開發(fā)前,我首先要說的是,我的記錄過程可能比較發(fā)散,遇到問題了可能就會大篇幅的說一下,也可能會簡略過,希望見諒!
客戶端搭建準(zhǔn)備過程
客戶端類型選擇
現(xiàn)在的移動端開發(fā)類型主要就是三種:
- native-app
- web-app
- hybrid-app
native-app
原生應(yīng)用程序:原生應(yīng)用程序是某一個移動平臺(比如iOS或安卓)所特有的,使用相應(yīng)平臺支持的開發(fā)工具和語言(比如iOS平臺支持Xcode和Objective-C,安卓平臺支持Eclipse和Java)。原生應(yīng)用程序看起來(外觀)和運行起來(性能)是最佳的。
web-app
HTML5應(yīng)用程序使用標(biāo)準(zhǔn)的Web技術(shù),通常是HTML5、JavaScript和CSS。這種只編寫一次、可到處運行的移動開發(fā)方法構(gòu)建的跨平臺移動應(yīng)用程序可以在多個設(shè)備上運行。雖然開發(fā)人員單單使用HTML5和JavaScript就能構(gòu)建功能復(fù)雜的應(yīng)用程序,但截至本文截稿時仍然存在一些重大的局限性,具體包括會話管理、安全離線存儲以及訪問原生設(shè)備功能(攝像頭、日歷和地理位置等)。
native-app
混合應(yīng)用程序:混合應(yīng)用程序讓開發(fā)人員可以把HTML5應(yīng)用程序嵌入到一個細薄的原生容器里面,集原生應(yīng)用程序和HTML5應(yīng)用程序的優(yōu)點(及缺點)于一體。
在考慮到底是用那種類型的開發(fā)方式時,我們主要考量的就是我們的項目的功能和擴展性。而相對于自身來說,吐槽君并沒有涉及到平臺擴展,我也沒有想讓他衍生到其他平臺。另外就是功能和性能的要求,項目中會涉及到錄音和錄像和播放功能,在這方面,原生開發(fā)有著不可動搖的位置。
所以,我選擇原生開發(fā)。
語言選擇
現(xiàn)在的iOS開發(fā)中主要有兩種開發(fā)語言:
- Objective-C
- Swift
Objective-C
Objective-C是非常實用的語言。它是一個用C寫成很小的運行庫,令應(yīng)用程序的尺寸增加很小,和大部分OO系統(tǒng)使用極大的VM執(zhí)行時間會取代了整個系統(tǒng)的運作相反。Objective-C寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和Smalltalk系統(tǒng)要使用極大的內(nèi)存來開啟一個窗口的情況相反。因此,Objective-C它完全兼容標(biāo)準(zhǔn)C語言(C++對C語言的兼容僅在于大部分語法上,而在ABI(Application Binary Interface)上,還需要使用extern "C"這種顯式聲明來與C函數(shù)進行兼容),而在此基礎(chǔ)上增加了面向?qū)ο缶幊陶Z言的特性以及Smalltalk消息機制。
Swift
Swift 是一種新的編程語言,用于編寫 iOS 和 OS X 應(yīng)用。Swift 結(jié)合了 C 和 Objective-C 的優(yōu)點并且不受C兼容性的限制。Swift 采用安全的編程模式并添加了很多新特性,這將使編程更簡單,更靈活,也更有趣。Swift 是基于成熟而且倍受喜愛的 Cocoa 和 Cocoa Touch 框架,他的降臨將重新定義軟件開發(fā)。
Swift 的開發(fā)從很久之前就開始了。為了給 Swift 打好基礎(chǔ),蘋果公司改進了編譯器,調(diào)試器和框架結(jié)構(gòu)。我們使用自動引用計數(shù)(Automatic Reference Counting, ARC)來簡化內(nèi)存管理。我們在 Foundation 和 Cocoa的基礎(chǔ)上構(gòu)建框架棧并將其標(biāo)準(zhǔn)化。Objective-C 本身支持塊、集合語法和模塊,所以框架可以輕松支持現(xiàn)代編程語言技術(shù)。正是得益于這些基礎(chǔ)工作,我們現(xiàn)在才能發(fā)布這樣一個用于未來蘋果軟件開發(fā)的新語言。
Objective-C 開發(fā)者對 Swift 并不會感到陌生。它采用了 Objective-C 的命名參數(shù)以及動態(tài)對象模型,可以無縫對接到現(xiàn)有的 Cocoa 框架,并且可以兼容 Objective-C 代碼。在此基礎(chǔ)之上,Swift 還有許多新特性并且支持過程式編程和面向?qū)ο缶幊獭?br>
在這里我選擇的是oc。為什么選擇他呢,主要是因為swift還在更新吶,不斷地有新的方法出現(xiàn)而老的方法在更迭,實在是可用性低了點。相對于此,oc就很穩(wěn)定了。
使用CocoaPods
為什么使用他呢?主要是因為使用它能夠更好的更便捷的管理我的三方庫和資源文件,能夠省去很多的更新操作。
怎么使用直接戳這里吧,不是我寫的,但是很全面。http://code4app.com/article/cocoapods-install-usage
第三方庫索引
這里先大概的把我們以后要用到的三方庫先都集成上去:
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 網(wǎng)絡(luò)請求框架,是對我們oc現(xiàn)有的官方的語言的二次封裝,但是根據(jù)項目不同,到時候我們在對AFNetworking進行封裝。
- SDWebImage 圖片加載與緩存三方庫,主要是用在了網(wǎng)路圖片的請求與加載上面,突出的重點就是本地緩存和斷點續(xù)傳和二次加載的查找本地機制。
- MBProgressHUD 加載等待圖,沒啥說的
- Masonry 控件添加約束三方庫,比較好用
- MJExtension json轉(zhuǎn)模型三方庫
- MJRefresh 下拉刷新、上拉刷新
- JKCategories 分類總結(jié)
- RDVTabBarController tabbar設(shè)置
- Reachability 網(wǎng)絡(luò)狀況
接下來就是
$ pod install

項目框架規(guī)劃

這是我比較喜歡的項目結(jié)構(gòu),也是我這幾年用的比較順手的。經(jīng)典的MVC模式開發(fā)架構(gòu)。
簡單的介紹一下我的結(jié)構(gòu)
- TCBase

控制器,網(wǎng)絡(luò)請求,視圖,模型的基類所在地,整合化一的去規(guī)劃現(xiàn)有功能和相同和類似功能。更好的抽離出基類能夠很好地控制代碼的繁簡度。
- 五大模塊

我比較喜歡按照底部tabbar分化功能,簡單明了,互不打擾。
- TCUtility
在這個模塊中我主要是用來放一些三方庫的二次封裝和工具類。 - TCConfig
配置文件存放處。主要就是delegate文件和pch文件
在這里我想說一下關(guān)于pch文件的問題,現(xiàn)在很多人多說不建議用pch文件了,改用h文件進行導(dǎo)入,這樣做的好處是避免了程序啟動時的啟動時間和性能優(yōu)化。而我本身根據(jù)測試覺得并沒有多大的影響,而且pch比h文件更方便的導(dǎo)入,何樂而不為。
講一下pch文件如何導(dǎo)入:

- TCOther
這里存放的就是一些不會經(jīng)常變得文件了
基礎(chǔ)框架搭建完畢
接下來就是五大功能版塊和工具類的封裝和細化了。