Xcode相關概念:後端
概念:project設計模式
指一個項目,該項目會負責管理軟件產品的所有源代碼文件、所有資源文件、相關配置,一個Project能夠包含多個Target。安全
概念:target網絡
一個target指的是根據project中的其它內容生成的最終產品,它是線程能夠直接讀懂的代碼。數據結構
概念:schemeapp
scheme是對過程的定義,它定義了一個target被生成的一系列過程。可在Scheme中定義的Target的構建過程有:Build/Run/Test/Profile/Analyze/Archive框架
概念:workspace函數
簡單來講,Workspace和project是目錄結構的兩層,workspace是project的容器,不過須要注意工程目錄結構和文件在操做系統中的目錄結構沒有關係。在該容器中能夠存放多個你建立的Xcode Project, 以及其餘的項目中須要使用到的文件。工具
有了workspace,咱們能夠更方便地實現代碼的重用,Xcode負責處理不一樣project之間的依賴關係。單元測試
概念:build setting
配置產品的Build設置,比方說,使用哪一個Architectures?使用哪一個版本的SDK?。在Xcode Project中,有Project級別的Build Setting,也有Target級別的Build Setting。Build一個產品時必定是針對某個Target的,所以,XCode中老是優先選擇Target的Build Setting,若是Target沒有配置,則會使用Project的Build Setting。
概念:build phases
這個固然就是編譯過程中的各個階段了,檢查依賴 -》預處理並編譯源文件 -》 連接二進制庫文件組成可執行文件 -》 copy資源文件組成bundle
界面:
全部的可視化元素都承載於一個窗口中,窗口左側的元素是navigator,至關因而整個project的索引;中間是editor,同時也具備導航功能;右側是utilities元素,包含各類inspector,幫助信息等等。而標題欄則是控制器,控制編譯哪個項目,控制視圖顯示等。
workspace目錄結構:
proj-folder:
----src:
interface:
每一個界面裏的views&handlers
utility:
可複用的父類&實用工具類
service:
長期存在於內存中提供服務的類
model:
當前應用所須要的entities&managers
Supporting Files:
main.m
common.h
AppDelegate.m
plist&pch
----rc:
images.xcassets
conf:
image:
----test:
單元測試類
----Frameworks:
當前應用依賴的框架
----Products:
可執行文件
proj-folder-2:
... ... ...
ps1:以上知識工程邏輯目錄結構,要保持邏輯目錄和文件目錄一致,使用synx工具。
ps2:不僅是iOS客戶端,對於Python後端,main.py,common.py,基本上也是任何工程都有的文件,目錄結構也類似。
ps3:對於複雜的第三方項目,最好創建workspace放在其它依賴項目中,能夠藉助cocoapods。
設計模式
一、MVC-S
數據模型和需求對應,不要常常改變;視圖只依賴於模型,也儘可能不要常常改變,方便複用(視圖須要依賴於模型,是由於有時確實更應該減輕控制器的負擔,好比視圖也能夠發送網絡請求加載和存儲數據,一個Cell能夠知道數據模型的結構,不然什麼都經過控制器來完成,代碼就太過冗長);控制器同時依賴於視圖和數據模型,可能會常常更改。
對於比較那些視圖和模型有足夠直接的關係的邏輯,徹底能夠直接經過視圖對模型的依賴更方便的完成,必須非要經過第三方。不然控制器的功能可能過度繁雜。固然視圖只須要知道模型的數據結構就能夠了,不能夠操做數據對象。若是須要傳數據對象給視圖,應該聲明爲weak,而且確保不要修改它,若是須要涉及到對數據的操做固然須要依靠控制器。
總之就是,視圖負責顯示邏輯,控制器負責控制邏輯
二、Service層
對於一些須要長期管理和維護的操做,好比音頻播放,大型文件的下載等都須要長期管理,能夠把這些代碼封裝來成爲Service類。所謂服務,就是那些長期存在於內存中提供服務,管理長期任務的對象。對於Cocoa Touch,能夠把service對象放置在app delegate對象中;對於Tornado,能夠把service對象放置在common.py中。
須要注意的地方是,不管是數據模型的Manager類仍是Service類的實例,都應該用線程安全方法經過單例模式來建立,而且應該經過懶加載的方式來建立,就如同NSManagedObjectContext類的實例同樣。單例通常被維護在一些支持文件中。
這樣的設計模式,我把它成爲MVC-S。以下圖,注意到view對model只有關聯依賴,去不能擁有。
代碼風格
用空行對一個很長的函數進行分段
在每一個分段的最前面聲明本段內全部新添加的變量,變量名儘量所有小寫