對比 |
ASI | AFN |
更新狀態 | 2012年10月份,已經中止更新 | 持續更新中,目前已更新至2.0版 |
介紹 |
ASI的直接操做對象ASIHTTPRequest,是一個實現了了NSCopying協議的NSOperation子類。
在initialize和initWithURL:方法中初始化相關屬性並配置一系列請求相關參數默認值。此外,ASIHTTPRequest還提供了一系列的實例方法用來配置請求對象。
|
AFN的直接操做對象AFHTTPClient,是一個實現了NSCoding和NSCopying協議的NSObject子類。AFHTTPClient是一個封裝了一系列操做方法的「工具類」,處理請求的操做類是一系列單獨的,基於NSOperation封裝的,AFURLConnectionOperation的子類。 |
線程處理模式 |
每個請求都由構造方法初始化一個(共享)實例,經過這個實例配置參數併發起請求。ASI最初使用delegate模式回調,在iOS SDK支持Block以後也提供了註冊Block的實例方法。
ASI採起的是CFHTTP請求完成,直接回調ASIHTTPRequest的實例方法,經過儲存的實例對象記錄的信息完成Delegate模式或Block模式的回調。
在異步請求的處理上,ASIHTTPRequest對象初始化結束後,在startAsynchronous方法中把對象加入共享操做隊列。此後,包括建立CFHTTPMessageRef,也就是處理網絡請求的主要對象(事實上是一個指向__CFHTTPMessage結構的指針),在內的全部操做都在ASIHTTPRequest對象所屬的子線程中完成。
|
AFN的示例代碼中經過一個靜態方法,使用dispatch_once()的方式建立AFHTTPClient的共享實例,這也是官方建議的使用方法。在建立AFHTTPClient的初始化方法中,建立了OperationQueue並設置一系列參數默認值。在getPath:parameters:success:failure方法中建立NSURLRequest,以NSURLRequest對象實例做爲參數,建立一個NSOperation,並加入在初始化發方中建立的NSOperationQueue。
以上操做都是在主線程中完成的。在NSOperation的start方法中,以此前建立的NSURLRequest對象爲參數建立NSURLConnection並開啓連結。
|
數據處理模式 | ASI在這方面顯得更原始,沒有針對任何數據類型作特別封裝,只是預留了各類接口和工具供開發者自行擴展。 | AFN針對JSON、XML、PList和Image四種數據結構封裝了各自處理器,開發者能夠把處理器註冊到操做隊列中,直接在回調方法中得到格式化之後的數據。 |
同步請求 |
ASI則是直接經過調用一個startSynchronous方法。
|
AFN默認沒有封裝同步請求,若是開發者須要使用同步請求,則須要重寫getPath:parameters:success:failure方法,對AFHTTPRequestOperation進行同步處理 |
異步回調的處理 | 【使用AFNetworking進行網絡異步請求時,block:(void(^)代碼塊實際返回到UI主線程中。即便在子線程中使用AFNetWorking進行網絡的異步請求,block:(void(^)代碼塊仍然返回到UI主線程中(AF框架,它裏面已經create了異步線程 )。所以不管當前處在主線程仍是子線程,異步返回均返回到UI主線程中。】 |
爲一系列相關的請求定義一個HTTPClient,共用一個BaseURL。每次請求把URL中除BaseURL的Path部分作爲參數傳給HTTPClient的靜態方法,並註冊一個Block用於回調。
AFN則直接使用了NSOperation的completionBlock屬性。
|
基於的底層開發框架
|
CFNetwork框架
使用CFnetwork而不是Cocoa框架NSURL有幾點好處。CFNetwork更加專一於網絡協議,而NSURL更加專一於數據訪問,好比經過HTTP或者FTP傳輸數據。儘管NSURL的確也提供了一些可配置功能,但是CFNetwork提供的要多的多。另外NSURL還須要你使用Objective_c。若是作不到這點的話,仍是應該使用CFNetwork
|
NSURL
【使用iOS5.0 SDK NSURLConnection:
一、進行網絡同步請求(sendSynchronousRequest)時,調用該請求接口的操做在哪一個線程,同步返回的網絡結果就處於哪一個線程,所以一般進行網絡同步請求時,爲了不阻塞UI主線程,須要在子線程中進行網絡請求;
二、進行網絡異步請求(sendAsynchronousRequest)時,block:(void(^)代碼塊實際返回到子線程中。所以,此時如須要向UI線程發送通知,則須要跳轉到主線程中發送通知dispatch_async(dispatch_get_main_queue(), ^{});】
|
底層開發礦建介紹 |
CFNetwork是基於Core Foundation中CFStream的一個底層高性能網絡框架,它由提供基礎服務的CFSocketStream,支持HTTP協議的CFHTTP,基於CFHTTP用於身份認證的CFHTTPAuthentication和支持FTP協議的CFFTP組成。
Core Foundation框架中的CFSocket就是基於BSD Socket開發的。它幾乎涵蓋了BSD Socket的所有功能,更重要的是把Socket整合到事件的處理循環中。Core Founda-tion中較高層的CFStream是基於CFSocket開發的讀寫流支持。
|
如圖所示,ASI是基於CFHTTP開發的一個組件;而AFN的基礎——NSURL,也是基於CFNetwork開發的,也就是說ASI相比AFN更加底層。 |
性能對比 | AFN請求優於ASI | |
總結 | ASI更適合已經發展了一段時間的應用,或者開發資源相對豐富的團隊,由於每每這些團隊(或他們的應用)已經積累了必定的經驗,不管是產品上仍是技術上的。需求複雜度就是在這種時候高起來,並且底層訂製的需求也愈來愈多,此時AFN就很難知足需求,須要犧牲必定的易用性,使用ASI做爲網絡底層控件。 | AFN適合邏輯簡單的應用,或者更適合開發資源尚不豐富的團隊,由於AFN的易用性要比ASI好不少,而這樣的應用(或團隊)對底層網絡控件的定製化要求也很是低。 |
一、alloc 建立對象,分配空間html
二、init (initWithNibName )初始化對象,初始化數據java
三、loadView 從nib載入視圖,一般這一步不須要去幹涉。除非你沒有使用xib文件建立ios
四、viewDidLoad載入完成,能夠進行自定義數據以及動態建立其餘控件程序員
五、viewWillAppear視圖將出如今屏幕以前,立刻這個視圖就會被展示在屏幕上了web
六、viewDidAppear 視圖已在屏幕上渲染完成面試
當一個視圖被移除屏幕而且銷燬的時候的執行順序,這個順序差很少和上面的相反算法
一、viewWillDisappear視圖將被從屏幕上移除以前執行sql
二、viewDidDisappear視圖已經被從屏幕上移除,用戶看不到這個視圖了數據庫
3.viewUnLoad 編程
四、dealloc視圖被銷燬,此處須要對你在init和viewDidLoad中建立的對象進行
iOS開發數據庫篇—SQLite簡單介紹
1、離線緩存
1.ios中數據的存儲方式
(1)Plist(NSArray\NSDictionary)
(2)Preference(偏好設置\NSUserDefaults)
(3)NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)
(4)SQLite3
(5)Core Data
說明:
(1)什麼是SQLite?
答:SQLite是一款輕型的嵌入式數據庫,安卓和ios開發使用的都是SQLite數據庫
(2)特色(優勢)
答:1)它佔用資源很是的低,在嵌入式設備中,可能只須要幾百K的內存就夠了
2)它的處理速度比Mysql、PostgreSQL這兩款著名的數據庫都還快
(3)什麼是數據庫
答:數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫
(4)數據庫的分類
答:能夠分爲2大種類
關係型數據庫(主流)和對象型數據庫(直接把內存中的對象塞入到數據庫,對比關係型數據庫而言性能不能很好,效率不高)
(5)經常使用關係型數據庫有哪些?
答:PC端:Oracle、MySQL、SQL Server、Access、DB二、Sybase
嵌入式\移動客戶端:SQLite
(6)數據庫是如何存儲數據的?
答:數據庫的存儲結構和excel很像,以表(table)爲單位 。表由多個字段(列、屬性、column)組成,表裏面的每一行數據稱爲記錄
(7)數據庫存儲數據的步驟?
1)新建一張表(table)
2)添加多個字段(column,列,屬性)
3)添加多行記錄(row,record,每行存放多個字段對應的值)
3、Navicat
Navicat是一款著名的數據庫管理軟件,支持大部分主流數據庫(包括SQLite)
*進程是指在系統中正在運行的一個應用程序
*1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程)
線程是進程的基本執行單元,一個進程(程序)的全部任務都在線程中執行
好比使用酷狗播放音樂、使用迅雷下載電影,都須要在線程中執行
*iOS有三種多線程編程的技術,分別是:NSThread 、Cocoa NSOperation 、GCD。 這三種編程方式從上到下,抽象度層次是從低到高的,抽象度越高的使用越簡單,也是Apple最推薦使用的。
NSThread:
優勢:NSThread 比其餘兩個輕量級
缺點:須要本身管理線程的生命週期,線程同步。線程同步對數據的加鎖會有必定的系統開銷
Grand Central Dispatch 簡稱(GCD)是蘋果公司開發的技術,以優化的應用程序支持多核心處理器和其餘的對稱多處理系統的系統。這創建在任務並行執行的線程池模式的基礎上的。
GCD的工做原理是:讓程序平行排隊的特定任務,根據可用的處理資源,安排他們在任何可用的處理器核心上執行任務。
一個任務能夠是一個函數(function)或者是一個block。 GCD的底層依然是用線程實現,不過這樣可讓程序員不用關注實現的細節。
GCD會自動根據任務在多核處理器上分配資源,優化程序
GCD中的FIFO隊列稱爲dispatch queue,它能夠保證先進來的任務先獲得執行。