一 OC 小結html
1 什麼是 OC 語言?ios
OC 語言即面嚮對象語言,它擴展了 ANSI C 語言,將 SmallTalk 式的消息傳遞機制加入到 ANSI C 中.它是蘋果 OS 和 iOS 以及相關的 API,Cocoa 和 Cocoa Touch 的主要編程語言.git
2 OC 語言的特色:程序員
3 iOS 的生態系統不只僅指其軟件方面的豐富,更多指的是其設備的多樣性.數據庫
4 Core OS編程
是用 FreeBSD 和Mach所改寫的Darwin,是開源的符合 POSIX 標準的一個 UNIX 核心.該層包含全部 iOS 的基礎功能(全部的這些功能都是經過 C 語言的 API 來提供的).另外該層具備 UNIX 特色,所以當將 UNIX 上的功能移植到 iOS 上的時候用到Core OS 的 API.同時該層還提供了硬件和系統框架之間的接口,但出於安全考慮,只有有限的框架能使用.swift
5 Core Services設計模式
它在 Core OS 的基礎上提供了更爲豐富的功能,其中包括 Foundation.Framework 和 Core Foundation.Framework.之因此叫 Foundation 是由於,它提供了處理字串,排列,時間等基礎功能.).其中 Foundation 屬於 OC 是 API, 而 Core Foundation 屬於 C 的 API.另外 Core Sercies 還提供了Security(處理認證,密碼管理,安全性管理),Core Location(定位)SQLite(輕量級的數據庫),Address Book(處理電話本)等功能.數組
6 Media緩存
即提供圖像,音樂,影片等多媒體功能.其中圖片包括2D(Quartz 2D) 和3D(Open GLES).音樂對應的模塊是Core Audio 和Open AL. 影片用 Media Player來支持.最後還提供了Core Animation動畫支持.
7 Cocoa Touch
它是 OC的 API其中最核心的部分的 UIKit.Framework,應用程序上的各類組件所有由它來提供實現.除此以外還負責多點觸摸.文字的輸出,圖片網頁的顯示,相機/文件的存取以及加速感應的部分.
8 swift
它繼承了 OC 的面向對象優勢,同時又具備簡便的語法結構.它具備如下特色.
9 OC 和 Swift 之間的區別
注:若是不想要break的效果 即後面的都想執行 那就寫上關鍵字 fallThrough,但在fallThrough後面就不能再定義常量變量了
10 swift 獨有的特色
Var a = (x:15,y:20.0)
其中 a 就是元祖名,裏面有兩個元素 x和 y.
取出賦值:a.x = 10或者 a.0 = 10(默認有下標)
修改類型: var a = (int,string) = (10,21.0)
打印時: printIn(a) = (10,20.0)
用下劃線省略不須要的元素 var a = (_,20.0)
原來是形式: func Sum(num1:int,num2:int) àint{} 調用: Sum(10,20)
如今:func Sum(numOne num1:int,numTwo num2:int) àint{}
調用: Sum(numOne:10,numTwo:20)
func addPerson(name:string,age:Int = 18) à string{}
調用: addPerson(「tom」)
注:修改年齡時 addPerson(「Tom」,age:19)
二 ARC 和 MRC 內存管理
從 MRC—>ARC 就是將內存管理部分,從開發者的函數中轉移到函數外部的runtime 中.因爲 runtime 的開發簡單,邏輯層次高,因此 runtime 的出錯概率很小,另外因爲編譯器的優化,使得運行速度很高.
ARC 的特色:
三 NSURLConnettion , NSURLSession,AFN 以及SYNetFrame處理網絡請求
1 NSURLConnettion
NSURLConnettion是 Core Foundation/CFNetwork框架 API 之上的一個抽象. NSURLConnettion是用來指代 Core Foundation 框架中的一系列組件: NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage 以及同名類 NSURLConnection.
注1:原來的使用原理:一個 NSURLRequest 發送給 NSURLConnect.被委託對象(遵照 NSURLConnectionDeledate 和 NSURLConnectionDataDeledate 非正式協議)異步返回一個 NSURLResponce 和服務器的 NSData.
注2:在一個請求發送給服務器的時候,系統會先查詢緩存信息,而後根據策略和可用寫的不一樣,當在緩存中找到響應則直接返回.不然,系統將根據咱們的策略,將接到請求後的響應緩存到並返回.
注3:在把請求發送給服務器的時候,服務器會發出鑑權查詢,這能夠有共享的 cookie 或者機密存儲來自動響應,或者由被委託的對象來響應.發送中的請求,也能夠被 NSURLProtocol 攔截,以便在必要的時候,無縫的改變其請求.
NSURLConnettion是使用步驟:
1 獲取一個 URL
2 經過 URL 建立一個請求
3 用NSURLConnettion發送請求
2 NSURLSession
和 NSURLConnection 同樣, NSURLSession 不只僅包括同名的 NSURLSession, 還包括NSURLRequest 和 NSURLCache. 同時將NSURLConnection 對應爲NSURLSession,NSURLSessionFiguration 以及NSURLSession 的三個子類,即NSURLSessionTask,NSURLSessionUpLoadTask 和 NSULSessionDownLoadTask.
和 NSURLConnection 相比, NSURLSession 最大的改變能夠配置每個緩存的session 緩存, cookie 值,協議以及證書策略甚至跨程序共享這些信息.這保證了程序和網絡框架之間的相互獨立.每個 NSURLSession 有一個 NSURLSessionConfiguration 來進行初始化, NSURLSessionConfiguration指定了策略,以及在移動設備上加強性能的選項.
NSURLSession 的另外一個特色就是 session Task, 用來處理的上傳和下載.和 NSURLConnection 最大的不一樣之處在於,全部的 task 共享其創造者 NSURLSession.
注: NSURLSessionTask分析
NSURLSessionTask 是一個抽象類,裏面包含NSURLSessionDataTask , NSURLSessionDownLoadTask 以及 NSURLSessionUpLoadTask三個子類.這三個子類封裝了網絡的基本任務:獲取數據,上傳和下載
使用原理:當一個 NSURLSessionDataTask 完成的時候,會有一個返回的數據,一個 NSURLSessionDownLoadTask 完成的時候會帶一個臨時文件的路徑.文件上傳的時候也會返回必定的數據,因此能夠說 NSURLSessionUpLoadTask 是繼承於 NSURLSessionDataTask.全部的 Task 均可以取消,暫停和恢復,當暫停的時候會記錄當前的位置,以便下載繼續今後點繼續下載.須要說明的是 NSURLSessionTask 是由 NSURLSession 建立的.
NSURLSession的使用步驟:和 NSURLConnection 基本類似,而後使用resume方法來將它運行.
1 獲取一個 URL
2 經過 URL 建立一個請求
2.1 建立一個上傳的NSData(UpLoad 上傳的時候用)
3 建立一個NSURLSession的單例
4 經過NSURLSession發送請求(注:使用 resume)
3 NSURLSession 和 NSURLConnection 的區別
NSURLSession即有 session 的代理方法又有 Task 的代理方法.session 的代理方法用來處理鏈接層的問題(服務器的信任,客戶端證書的評估等),Task 的代理方法用來處理鑑權查詢和與網絡請求有關的問題.
4 AFN 框架
AFN 是對 NSURLConnection 的一層封裝
AFN 的主要功能:
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager(封裝了經常使用的 HTTP 方法)
AFHTTPRequestOperationManager的屬性
1 baseURL :開發者針要對 AFHTTPRequestOperationManager 自定義一個單例子類,設置 baseURL, 全部的網絡訪問,都只使用相對路徑便可.
2 requestSerializer :請求數據格式/默認是二進制的 HTTP
3 responseSerializer :響應的數據格式/默認是 JSON 格式
4 operationQueue
5 reachabilityManager :網絡鏈接管理器
AFHTTPRequestOperationManager方法:
1 manager :方便建立管理器的類方法
2 HTTPRequestOperationWithRequest :在訪問服務器時,若是要告訴服務器一些附加信息,都須要在 Request 中設置
3 GET
4 POST
AFURLSessionManager
AFHTTPSessionManager(封裝了經常使用的 HTTP 方法)
1 GET
2 POST
3 UIKit+AFNetWorking分類
4 NSProgress(利用 KVO)
AFURLRequestSerialization :請求的數據格式/默認是二進制的
AFURLResponseSerialization :響應的數據格式/默認是JSON格式
1 安全策略:(HTTPS 和AFSecurityPolicy)
2 網絡檢測: (對連接方式進行了封裝和 AFNetWorkingReachabiliManager)
使用連接: http://www.cnblogs.com/worldtraveler/p/4736643.html
AFN 的使用步驟:
1 建立一個請求操做管理者
2 聲明響應結果進行 JSON,XML等數據解析,返回 Data
3 設置請求參數
4 發送請求
補充 ASI: (功能很強大,可是已經不更新了)
ASI 使用步驟:
1 獲取 URL
2 獲取 ASI 請求對象
3 發送請求
AFN和ASI的區別
1、底層實現
1> AFN的底層基於OC的NSURLConnection和NSURLSession
2> ASI的底層基於純C語言的CFNetwork框架
3> ASI的運行性能 高於 AFN
2、對服務器返回的數據處理
1> ASI沒有直接提供對服務器數據處理的方式,直接返回data\string
2> AFN提供了多種對服務器數據處理的方式
* JSON處理
* XML處理
* 其餘處理
3、監聽請求的過程
1> AFN提供了success和failure兩個block來監聽請求的過程(只能監聽成功和失敗)
* success : 請求成功後調用
* failure : 請求失敗後調用
2> ASI提供了3套方案,每一套方案都能監聽請求的完整過程
(監聽請求開始、接收到響應頭信息、接受到具體數據、接受完畢、請求失敗)
* 成爲代理,遵照協議,實現協議中的代理方法
* 成爲代理,不遵照協議,自定義代理方法
* 設置block
4、在文件下載和文件上傳的使用難易度
1> AFN
* 不容易監聽下載進度和上傳進度
* 不容易實現斷點續傳
* 通常只用來下載不大的文件
2> ASI
* 很是容易實現下載和上傳
* 很是容易監聽下載進度和上傳進度
* 很是容易實現斷點續傳
* 下載或大或小的文件都行
5、ASI提供了更多的實用功能
1> 控制圈圈要不要在請求過程當中轉
2> 能夠輕鬆地設置請求之間的依賴:每個請求都是一個NSOperation對象
3> 能夠統一管理全部請求(還專門提供了一個叫作ASINetworkQueue來管理全部的請求對象)
* 暫停\恢復\取消全部的請求
* 監聽整個隊列中全部請求的下載進度和上傳進度
四 正式協議和非正式協議
正式協議:指的是一個以@ protocol方式命名的方法列表,它要求顯示的採用協議.包括@required 和@optional.
正義協議的意義:將正義協議中的方法剝離出來
非正式協議:定義爲凡是 NSObject的類或其子類的類別.非正式協議的方法是本身定義的
五 HTTP 的 TCP/UDP 協議
1 TCP/IP 或者 UDP/IP 協議組,包括三層網絡協議即網絡層,傳輸層,應用層.
網絡層協議包括:IP 協議, ICMP 協議, ARP 協議, RARP 協議以及 BOOTP 協議.
傳輸層協議包括:TCP 和 UDP 協議
應用層協議包括:FTP,HTTP,SMTP,DNSTELNET 等.
TCP 須要三層握手, UDP 不須要
結論: HTTP 雖然是一個協議,可是其仍是基於 TCP 的協議.
2 scoket
socket 即 TCP/IP 或者 UDP/IP
Scoket 的優缺點:
優勢:
缺點:
HTTP 協議的優缺點
優勢:
缺點:
總結: Scoket 適用於對傳輸速度,安全性,實時交互,費用等要求較高的時候使用.HTTP則相反,適用於快速開發
六 JSON/XML 數據解析
1 XML 便可擴展標記語言(標記是計算機能夠理解的語言,經過標記計算機就能夠處理事件).可擴展性指的是:定義這些標記語言的時候,既可使用國際通用的語言(HTML),也可使用自定義的標記語言.
1.1 簡單來講, XML 是一種數據的描述語言,可是呢, XML 沒有語言的基本功能即被計算機所讀取,所以 XML 須要用另外一種語言來解讀.
1.2 XML 的基本特色
1.3小結
XML 是獨立於軟件和硬件以外的一種語言,它在 Web 中的做用幾乎和 HTML 同樣重要.XML 無處不在,它是軟件中傳遞的最經常使用的數據格式.而且愈來愈流行.
注: XML 能夠用於移動端和 PC 端,它是用來保存和傳輸數據的, HTML 是用來展現數據.
1.4 XML 的特色
1.5 XML 的解析方式 DOM 和 SAX 解析
1.5.1 XML 的整體解析步驟:
1.5.2 DOM 和 SAX
DOM 即文檔對象類型, SAX即當前兩個主要使用的 API
1.5.3 DOM 和 SAX 的區別
> DOM 解析的時候將數據一次性讀入內存並進行解析, XML 解析的時候是以流的方式,邊讀入邊解析.所以對於比較大的 XML 是不適合用 DOM 解析的.
> DOM 用來處理 XML 文檔比較複雜或者隨機的處理 XML 文檔中的數據.而 SAX 處理的時候則是從頭至尾的一個個節點進行處理
2 JSON 解析
JSON 構建於兩種結構:(相似於)鍵值對和值的有序列表
2.1 JSON 的解析方法有: NSJSONSerialization(原生),TouchJson,SBJSON,
JSONKit.
2.2 JSON 解析步驟
2.3 JSON解析方法: http://blog.csdn.net/enuola/article/details/7903632/
3 XML 和 JSON 的區別
JSON:沒有結束標籤,更短,讀寫速度快,可以使用內建的方法進行解析,使用數組,不使用保留字.總之 JSON 是一種輕量型的數據解析格式.
七 GCD 和 NSOperation
1 pthread 是 C 語言中的線程方式,很少作要求(瞭解)
建立方式: int resurt = pthread_creat(&pthread,NULL,demo,NULL);
2 NSThread 建立方式
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(run) withObject:nil];
3 GCD
3.1使用消息循環的時候必須指定的兩個條件:輸入源和循環方式
Runloop 接收輸入事件的來源有兩種:輸入源和定時源.
消息循環的兩種方式: NSDefaultRunloopMode和 NSRunloopCommenModels
3.2 主線程的消息循環默認是開啓的,子線程的消息循環須要手動開啓方式以下:
[[NSRunloop currentRunloop] run];
3.3 GCD的執行步驟
> 建立任務
> 將任務添加到隊列中
3.4 GCD 的兩種執行任務的函數:同步執行函數(dispatch_sync)和異步執行函數(dispatch_async)
3.5 同步和異步函數決定了要不要開啓子線程,併發隊列和串行隊列決定了執行的方式.
3.6 主隊列:若主線程正在執行代碼,則不調度線程等待主線程執行完成
主隊列同步執行---形成死鎖.
緣由:主隊列等待主線程執行完畢,主線程等待主隊列空閒
主隊列和串行隊列的區別:
串行隊列:等上一個任務完成以後再調用當前任務
主隊列:在主線程上運行的隊列.當主線程上有任務執行的時候,不調度任務
3.7 全局隊列在本質上是併發隊列
3.8 比較
3.9 GCD 的特色
延遲操做:dispatch_after即在多少納秒以後,在那個隊列上,執行哪些操做
一次性執行:線程安全,能夠代替互斥鎖的使用
調度組:多個異步任務完成以後再作其餘操做即dispatch_group_t
4 NSOperation
4.1 NSOperation是一個抽象類
抽象類特色:不能直接使用,由於它的方法在本身的類中沒有實現,約束子類具備相同的屬性和方法,所以抽象類要使用子類
4.2 NSOperation的子類有三種
NSInvocationOperation,NSBlockOperation 和自定義的 operation
4.3 NSOperation 和 NSOperationQueue
先將要執行的操做封裝到NSOperation 中,而後再將NSOperation添加到NSOperationQueue 中.系統會將任務取出,並放在新線程上執行
NSOperation執行的時候默認是不會開啓新線程的,可是添加到NSOperationQueue 中後會開啓新線程
4.4 NSOperation和 GCD 比較
> GCD 是在 iOS4.0以後出現的,是對多核 CPU 作了優化,是 C 語言是技術
GCD 是將任務添加到隊列並以同步/異步執行的函數
GCD 的特色:延遲操做,一次性執行和調度組
> NSOperation iOS2.0推出,4.0後根據 GCD進行了重寫
將操做添加到隊列,就會自動執行操做的函數
特色:最大併發數,隊列的暫停/繼續,取消所有隊列的操做,指定操做間的依賴關係
最大併發數:同時執行的任務數.
注:指定完後,線程先去線程池中尋找有可用的線程,沒有找到後再建立新線程.而且線程執行完後放入線程池中,以待重用.
4.5 服務質量qualityOfService 用來設置操做的優先級
4.6 監聽操做的完成
4.7 設置操做依賴: [opB addDependence:opA];操做 B 依賴於操做 A
八 自動佈局
1 自動佈局通過的三個時期
MagicNumber -> autoresizingMask -> autolayout(6.0)
2 Masonry的使用
語法通常是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍數和位移修正
九 KVC KVO
1 KVC 鍵值編碼
1.1 做用:KVC 提供了一種在運行狀態而非編譯狀態狀況下動態訪問對象的屬性/成員變量的方法.即 KVC 能夠經過名稱使用該名稱的屬性.
1.2 使用注意:
1.3 實現原理
2 KVO 鍵值監聽 保持視圖和模型的同步
2.1 做用:當指定的對象發生改變的時候,該對象就會接收到通知.即每次指定的觀察者發生改變的時候,就會通知相應的觀察者
2.2 使用方法:
2.3 特色:當更改被監聽的值的時候,監聽者會當即接收到通知
2.4 KVO中誰要監聽誰註冊,而後對響應進行處理,使得觀察者與被觀察者徹底解耦。KVO只檢測類中的屬性,而且屬性名都是經過NSString來查找,編譯器不會檢錯和補全,所有取決於本身
3 二者之間的關係
KVC 是 KVO 實現的關鍵技術
十 通知,代理, block 以及單例設計模式
1 簡單對比
1.1 通知:
特色:一對多,多對多,多對一
原理:任何觀察者只要接收通知的名稱和發送者發送通知的名稱相同,則就會接到發送者發送的通知消息
實現步驟:發送通知,註冊觀察者接收通知,移除通知
1.2 代理
特色:一對一
原理:首先分清代理和被代理者.即被代理者不適合作某一件事,讓代理來作
使用步驟:(如圖 注: B 是被代理者, A 是代理)
1.3 block
block 是一個代碼塊,它能夠傳遞任何數據
特色:一對一
原理:就是 block 函數的使用,即在一個地方聲明一個block, 在使用的時候,只要在使用的時候調用便可
使用步驟:首先建立一個 block 函數,在須要的地方調用 block 函數
1.4 單例設計模式
單例:即一個類中只有一個實例,而且自行實例化後能夠在整個類中使用
使用步驟:
十一 四種動畫
1 動畫的三要素
1.1 CALayer和 UIView 很類似, UIView 有的功能 CALayer 基本上都有,所以說 CALayer 是覆蓋在 UIView 上薄薄的一層.UIView 和 CALayer 的區別是: UIView 上有點擊事件.CALayer 的用途有:一是對 view 的相關屬性設置(如圓角等),二是對 View 的動畫操做,所以能夠說對 view 上的動畫操做,本質上是對 view 上的 layer 操做
1.2 CAAnimation 即動畫的分類
CABasicAnimation(基礎動畫):
經過設定起點,終點,時間,動畫會沿着設置點進行移動.
CAKeyframeAnimation(關鍵幀動畫):
即關鍵點的 frame,就是經過設置起點,中間的關鍵點,終點和時間, CALayer 就會沿着設定的點移動.
CAAnimationGroup(組動畫):
即將多個動畫或者多種動畫組合成一個組裏面依次運行.
CATransition(轉場動畫):
蘋果原生的一些特定的動畫
2 動畫的實現步驟
2.1 CALayer 的初始化並設置屬性
2.2 設置動畫的類型並設置動畫的屬性
2.3 添加動畫
十二 數據庫的使用
數據存儲的方式:plist,歸檔(NSKeyedArchiver),偏好設置(NSUserDefaults),write 寫入文件,SQLite,Cocoa Data
使用方式:
http://www.jianshu.com/p/933a035a6ad4
http://www.jianshu.com/p/14fd706b632d
十四 第三方 SDK 集成
註冊成爲開發者à下載 SDKà看文檔
十五 runtime
運行時即在程序運行的時候要乾的事情.
產生的緣由是 C 語言中函數的執行是在編譯的時候就決定好了的,要執行的函數以及函數的執行順序等.OC是繼承於 C 的,是在 C 的基礎上添加了面向對象的特性,面向對象要求把編譯和連接的函數儘可能向後推遲.OC和 C 有很大的不一樣,其中就包括 OC 的函數, OC 函數的調用屬於動態調用,就是說 OC 中在編譯的階段僅僅編譯一部分函數,而大部分函數是在程序運行的時候才動態編譯的,這就須要用到運行時.
運行時能夠在程序運行的時候在動態的編譯和連接函數.同時運行時還具備自省即查看對象正在作的,不能作的以及合適的分發消息
更深刻的瞭解:
OC 的 runtime 是一個運行時庫,它是一個主要有 C 語言和彙編語言寫成庫,給 C 添加了面向對象的特性建立了 OC.也就是說它是在類方法中被加載,完成方法的分發,方法的轉發等.OC 的 runtime 創造了全部的結構體,從而讓面向對象成爲可能.
詳細瞭解: http://www.cocoachina.com/ios/20141008/9844.html
十七 APPWatch 和 XMPP
1 APPWatch的功能實現和控件基本和 iOS 一致的.
使用的注意點:
2 XMPP 即時通信
即時通信的實質是實時.
XMPP 實現步驟:節點鏈接服務器à服務器利用本地目錄系統中的證書對其認證à節點指定目標地址,服務器告知目標狀態à服務器查找鏈接並認證à節點之間進行交互
注: 只要知道程序的協議和程序的端口就能進行交互
十八 BUG 調試
http://stackoverflow.com
十九 git 和 SVN 及其比較
1 SVN屬於集中化版本控制系統,能夠理解爲 SVN = 版本控制+備份服務器.SVN 支持並行讀寫文件,支持代碼的版本化管理.其功能包括取出,導入,更新,分支,還原,更名等
特色: SVN 大多采用圖形化管理,易於上手.
2 Git 是一個分佈式版本管理系統,其功能包括clone,pull,push,branch,merge,
rebase.
特色:程序代碼版本化管理
3 SVN 和 Git 的優缺點
3.1 SVN 的優缺點: SVN對中文支持好,操做簡單,使用沒有難度,實施人員均可輕鬆上手。使用界面統一,功能完善,操做方便
3.2 Git 的優缺點: 對`程序源代碼進行差別化的版本管理,代碼庫佔極少的空間。易於代碼的分支化管理。不支持中文,圖形界面支持差,使用難度大。不易推廣。
4 總結: SVN更適用於項目管理, Git僅適用於代碼管理。