iOS程序啟動過程
- 執(zhí)行
Main
函數(shù) - 執(zhí)行
UIApplication Main
函數(shù) - 初始化
UIApplication(創(chuàng)建設(shè)置代理對象,進(jìn)入RunLoop循環(huán))
UIApplication
-
UIApplication
是一個iOS程序的象征 - 每個程序都只有一個
UIApplication
, 該對象是單例對象 - 使用
UIApplication
可以做一些應(yīng)用級的操作-
applicationIconBadgeNumber
: 設(shè)置提醒數(shù)字 -
networkActivityIndicatorVisible
: 聯(lián)網(wǎng)指示器是否可見
-
UIWindow
-
UIWindow
是一種特殊的UIView
, 每個App中至少有一個UIWindow
-
iOS
程序啟動后, 創(chuàng)建的第一個控件就是UIWindow
, 第二創(chuàng)建控制器的view
, 最后將view
添加到UIWindow
上 - 沒有
UIWindow
, 就看不到任何UI界面
-
當(dāng)多可
UIWindow
存在時, 只有keyWindow
才能與用戶交互
多控制器
- 為了便于管理控制器,
iOS
提供了兩個特殊的控制器UINavigationController
UITabBarController
UINavigationController
- 使用步驟:
- 初始化
- 設(shè)置為
UIWindow
的rootViewController
為UINavigationController
- 根據(jù)具體情況, 子控制器進(jìn)行
push
或pop
UIStoryboardSegue
-
Storyboard
上每一根用來界面跳轉(zhuǎn)的線捞奕,都是一個UIStoryboardSegue
對象(簡稱Segue
) - 根據(jù)跳轉(zhuǎn)方式可分為兩種類型
-
自動型:點擊某個控件后(比如按鈕),自動執(zhí)行
Segue
,自動完成界面跳轉(zhuǎn) -
手動型:需要通過寫代碼手動執(zhí)行
Segue
,才能完成界面跳轉(zhuǎn)[self performSegueWithIdentifier:@"login2contacts" sender:nil];
-
Segue
必須由來源控制器來執(zhí)行颈嚼,也就是說,這個perform
方法必須由來源控制器來調(diào)用
-
自動型:點擊某個控件后(比如按鈕),自動執(zhí)行
多控制器數(shù)據(jù)傳遞方式
- 順傳
- 逆?zhèn)?/li>
- 傳遞方式推薦:使用代理, 或監(jiān)聽-發(fā)布
UITabBarController
- 使用步驟
- 初始化控件
- 設(shè)置
UIWindow
的rootViewController
- 根據(jù)具體情況, 通過
addChildViewController
添加子控制器
Modal
- 除了
push
之外, 還有modal
切換控制器 任何控制器都可以使用Modal的形式展示出來
-
Modal
默認(rèn)效果是從下至上, 直到覆蓋整個屏幕
事件
- iOS中的事件可以分為3大類
- 觸摸事件
- 加速事件
- 遠(yuǎn)程控制事件
- 注意
- 只有繼承了
UIResponse
的對象才能處理事件, 它們稱之為響應(yīng)者對象
-
UIApplication
呢堰、UIViewController
驻谆、UIView
都繼承自UIResponder
,因此它們都是響應(yīng)者對象
奈嘿,都能夠接收并處理事件
- 只有繼承了
UITouch
- 當(dāng)用戶用一根手指觸摸屏幕時貌虾,會創(chuàng)建一個與手指相關(guān)聯(lián)的
UITouch
對象 - 一根手指對應(yīng)一個
UITouch
對象 -
UITouch
的作用- 保存著跟手指相關(guān)的信息,比如觸摸的位置裙犹、時間尽狠、階段
- 當(dāng)手指移動時,系統(tǒng)會更新同一個
UITouch
對象叶圃,使之能夠一直保存該手指在的觸摸位置 - 當(dāng)手指離開屏幕時袄膏,系統(tǒng)會銷毀相應(yīng)的
UITouch
對象
提示:iPhone開發(fā)中,要避免使用雙擊事件掺冠!
事件的產(chǎn)生和傳遞
- 發(fā)生觸摸事件后沉馆,系統(tǒng)會將該事件加入到一個由
UIApplication
管理的事件隊列中 -
UIApplication
會從事件隊列中取出最前面的事件,并將事件分發(fā)下去以便處理德崭,通常斥黑,先發(fā)送事件給應(yīng)用程序的主窗口(keyWindow)
- 主窗口會在視圖層次結(jié)構(gòu)中
找到一個最合適的視圖
來處理觸摸事件,這也是整個事件處理過程的第一步 - 找到合適的視圖控件后眉厨,就會調(diào)用視圖控件的
touches
方法來作具體的事件處理
Quartz2D
-
Quartz 2D
是一個二維繪圖引擎锌奴,同時支持iOS
和Mac
系統(tǒng) -
Quartz 2D
能完成的工作- 繪制圖形 : 線條\三角形\矩形\圓\弧等
- 繪制\生成圖片(圖像)
- ...
-
Quartz2D
的API是純C語言的 -
Quartz2D
的API來自于Core Graphics框架
- 數(shù)據(jù)類型和函數(shù)基本都以
CG
作為前綴
自定義View
- 如何利用
Quartz2D
繪制東西到view
上?- 首先憾股,得有圖形上下文鹿蜀,因為它能保存繪圖信息,并且決定著繪制到什么地方去
- 其次服球,那個圖形上下文必須跟
view
相關(guān)聯(lián)茴恰,才能將內(nèi)容繪制到view
上面
- 自定義
view
的步驟- 新建一個類,繼承自
UIView
- 實現(xiàn)
- (void)drawRect:(CGRect)rect
方法斩熊,然后在這個方法中- 取得跟當(dāng)前
view
相關(guān)聯(lián)的圖形上下文 - 繪制相應(yīng)的圖形內(nèi)容
- 利用圖形上下文將繪制的所有內(nèi)容渲染顯示到
view
上面
- 取得跟當(dāng)前
- 新建一個類,繼承自
CALayer
- 在
iOS
中往枣,你能看得見摸得著的東西基本上都是UIView
,比如一個按鈕、一個文本標(biāo)簽婉商、一個文本輸入框似忧、一個圖標(biāo)等等,這些都是UIView
-
UIView
之所以能顯示在屏幕上丈秩,完全是因為它內(nèi)部的一個CALayer圖層
- 在創(chuàng)建
UIView
對象時盯捌,UIView
內(nèi)部會自動創(chuàng)建一個圖層(即CALayer對象)
,通過UIView
的layer
屬性可以訪問這個層 - 當(dāng)
UIView
需要顯示到屏幕上時蘑秽,會調(diào)用drawRect:
方法進(jìn)行繪圖饺著,并且會將所有內(nèi)容繪制在自己的圖層上,繪圖完畢后肠牲,系統(tǒng)會將圖層拷貝到屏幕上幼衰,于是就完成了UIView
的顯示 -
UIView
本身不具備顯示的功能,是它內(nèi)部的圖層CALayer
才有顯示功能 - 通過操作
CALayer
對象缀雳,可以很方便地調(diào)整UIView
的一些外觀屬性渡嚣,比如- 陰影
- 圓角大小
- 邊框?qū)挾群皖伾?/li>
- ...
隱式動畫
每一個
UIView
內(nèi)部都默認(rèn)關(guān)聯(lián)著一個CALayer
,我們可用稱這個Layer
為Root Layer(根層)
所有的
非Root Layer
肥印,也就是手動創(chuàng)建的CALayer對象
识椰,都存在著隱式動畫
-
什么是隱式動畫?
- 當(dāng)對
非Root Layer
的部分屬性進(jìn)行修改時深碱,默認(rèn)會自動產(chǎn)生一些動畫效果
而這些屬性稱為Animatable Properties(可動畫屬性)
- 當(dāng)對
-
列舉幾個常見的
Animatable Properties:
-
bounds
:用于設(shè)置CALayer
的寬度和高度腹鹉。修改這個屬性會產(chǎn)生縮放動畫 -
backgroundColor
:用于設(shè)置CALayer
的背景色。修改這個屬性會產(chǎn)生背景色的漸變動畫 -
position
:用于設(shè)置CALayer
的位置敷硅。修改這個屬性會產(chǎn)生平移動畫
-
核心動畫
-
Core Animation
簡介-
Core Animation
功咒,中文翻譯為核心動畫,它是一組非常強大的動畫處理API
绞蹦,使用它能做出非常炫麗的動畫效果力奋,而且往往是事半功倍。也就是說坦辟,使用少量的代碼就可以實現(xiàn)非常強大的功能刊侯。 -
Core Animation
可以用在Mac OS X
和iOS
平臺。 -
Core Animation
的動畫執(zhí)行過程都是在后臺操作的锉走,不會阻塞主線程。 -
Core Animation
是直接作用在CALayer
上的藕届,并非UIView
-
轉(zhuǎn)場動畫: CATransition
-
CATransition
是CAAnimation
的子類挪蹭,用于做轉(zhuǎn)場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果
休偶。iOS比Mac OS X的轉(zhuǎn)場動畫效果少一點 -
UINavigationController
就是通過CATransition
實現(xiàn)了將控制器的視圖推入屏幕的動畫效果
CADisplayLink
-
CADisplayLink
是一種以屏幕刷新頻率觸發(fā)的時鐘機制梁厉,每秒鐘執(zhí)行大約60次左右
-
CADisplayLink
是一個計時器,可以使繪圖代碼與視圖的刷新頻率保持同步,而NSTimer
無法確保計時器實際被觸發(fā)的準(zhǔn)確時間 - 使用方法:
- 定義
CADisplayLink
并制定觸發(fā)調(diào)用方法 - 將顯示鏈接添加到主運行循環(huán)隊列
- 定義
進(jìn)程
-
進(jìn)程
是指在系統(tǒng)中正在運行的一個應(yīng)用程序
- 每個
進(jìn)程
之間是獨立
的词顾,每個進(jìn)程
均運行在其專用且受保護(hù)的內(nèi)存空間內(nèi) - 比如同時打開迅雷八秃、Xcode,系統(tǒng)就會分別啟動2個進(jìn)程
線程
- 1個
進(jìn)程
要想執(zhí)行任務(wù)肉盹,必須得有線程(每1個進(jìn)程至少要有1條線程)
一個進(jìn)程(程序)的所有任務(wù)都在線程中執(zhí)行
線程的串行
- 1個線程中任務(wù)的執(zhí)行是
串行
的- 1個線程中執(zhí)行多個任務(wù)昔驱,那么只能一個一個地
按順序執(zhí)行
這些任務(wù) - 也就是說,
在同一時間內(nèi)上忍,1個線程只能執(zhí)行1個任務(wù)
- 1個線程中執(zhí)行多個任務(wù)昔驱,那么只能一個一個地
多線程
- 1個
進(jìn)程
中可以開啟多條線程
骤肛,多條線程可以并行(同時)執(zhí)行不同的任務(wù)
- 進(jìn)程(車間) > 線程(車間工人)
多線程技術(shù)可以提高程序的執(zhí)行效率
多線程的原理
-
同一時間,CPU只能處理1條線程
窍蓝,只有1條線程在工作(執(zhí)行) -
多線程并發(fā)(同時)執(zhí)行
腋颠,其實是CPU快速地在多條線程之間調(diào)度(切換)
- 如果CPU調(diào)度線程的時間足夠快,就造成了多線程并發(fā)執(zhí)行的假象
-
思考:如果線程非常非常多吓笙,會發(fā)生什么情況淑玫?
- CPU會在N多線程之間調(diào)度,CPU會累死面睛,消耗大量的CPU資源
- 每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)
多線程的優(yōu)缺點
- 多線程的優(yōu)點
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU絮蒿、內(nèi)存利用率)
- 多線程的缺點
- 創(chuàng)建線程是有開銷的,iOS下主要成本包括:內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1KB)侮穿、椄杈叮空間(子線程512KB、主線程1MB亲茅,也可以使用-setStackSize:設(shè)置回铛,但必須是4K的倍數(shù),而且最小是16K)克锣,創(chuàng)建線程大約需要90毫秒的創(chuàng)建時間
- 如果開啟大量的線程茵肃,會降低程序的性能
- 線程越多,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計更加復(fù)雜:比如線程之間的通信袭祟、多線程的數(shù)據(jù)共享
GCD
- 什么是GCD?
- 全稱是
Grand Central Dispatch
验残,可譯為牛逼的中樞調(diào)度器
- 純C語言,提供了非常多強大的函數(shù)
- 全稱是
- GCD的優(yōu)勢
- GCD是蘋果公司為
多核
的并行運算
提出的解決方案 - GCD會自動利用更多的CPU內(nèi)核(比如雙核巾乳、四核)
- GCD會
自動管理線程的生命周期(創(chuàng)建線程您没、調(diào)度任務(wù)、銷毀線程)
- 程序員只需要告訴GCD想要執(zhí)行什么任務(wù)胆绊,不需要編寫任何線程管理代碼
- GCD是蘋果公司為
-
GCD中有2個核心概念
-
任務(wù)
:執(zhí)行什么操作 -
隊列
:用來存放任務(wù)
-
-
GCD的使用2個步驟
-
定制任務(wù)
- 確定想做的事情
-
將任務(wù)添加到隊列中
- GCD會自動將隊列中的任務(wù)取出氨鹏,放到對應(yīng)的線程中執(zhí)行
- 任務(wù)的取出遵循隊列的
FIFO原則
:先進(jìn)先出,后進(jìn)后出
-
- 隊列的類型
-
并發(fā)隊列(Concurrent Dispatch Queue)
- 可以讓多個任務(wù)并發(fā)(同時)執(zhí)行(自動開啟多個線程同時執(zhí)行任務(wù))
并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效
-
串行隊列(Serial Dispatch Queue)
- 一個任務(wù)執(zhí)行完畢后压状,再執(zhí)行下一個任務(wù)
-
NSOperation
-
NSOperation
的作用- 配合使用
NSOperation
和NSOperationQueue
也能實現(xiàn)多線程編程
- 配合使用
-
NSOperation
和NSOperationQueue
實現(xiàn)多線程的具體步驟- 先將需要執(zhí)行的操作封裝到一個
NSOperation
對象中 - 然后將
NSOperation
對象添加到NSOperationQueue
中 - 系統(tǒng)會自動將
NSOperationQueue
中的NSOperation
取出來 - 將取出的
NSOperation
封裝的操作放到一條新線程中執(zhí)行
- 先將需要執(zhí)行的操作封裝到一個
-
NSOperation
的子類-
NSOperation
是個抽象類仆抵,并不具備封裝操作的能力,必須使用它的子類
-
-
使用
NSOperation
子類的方式有3種NSInvocationOperation
NSBlockOperation
- 自定義子類繼承
NSOperation
,實現(xiàn)內(nèi)部相應(yīng)的方法
RunLoop
RunLoop對象
-
iOS中有2套API來訪問和使用
RunLoop
-
Foundation
NSRunLoop
-
Core Foundation
CFRunLoopRef
-
NSRunLoop
和CFRunLoopRef
都代表著RunLoop
對象NSRunLoop
是基于CFRunLoopRef
的一層OC包裝镣丑,所以要了解RunLoop
內(nèi)部結(jié)構(gòu)舔糖,需要多研究CFRunLoopRef
層面的API(Core Foundation層面)
RunLoop資料
CFRunLoopRef是開源的
http://opensource.apple.com/source/CF/CF-1151.16/
RunLoop與線程
每條線程都有唯一的一個與之對應(yīng)的
RunLoop
對象主線程的RunLoop已經(jīng)自動創(chuàng)建好了
,子線程的RunLoop需要主動創(chuàng)建
RunLoop在第一次獲取時創(chuàng)建莺匠,在線程結(jié)束時銷毀
URL
-
什么是URL
- URL的全稱是
Uniform Resource Locator
(統(tǒng)一資源定位符) - 通過1個URL金吗,能找到互聯(lián)網(wǎng)上唯一的1個資源
- URL就是資源的地址、位置慨蛙,
互聯(lián)網(wǎng)上的每個資源都有一個唯一的URL
- URL的全稱是
URL的基本格式 = 協(xié)議://主機地址/路徑
-
協(xié)議
:不同的協(xié)議辽聊,代表著不同的資源查找方式、資源傳輸方式 -
主機地址
:存放資源的主機(服務(wù)器)的IP地址(域名) -
路徑
:資源在主機(服務(wù)器)中的具體位置
URL中常見的協(xié)議
-
HTTP
- 超文本傳輸協(xié)議期贫,訪問的是遠(yuǎn)程的網(wǎng)絡(luò)資源跟匆,格式是http://
http協(xié)議是在網(wǎng)絡(luò)開發(fā)中最常用的協(xié)議
-
file
- 訪問的是本地計算機上的資源,格式是file://(不用加主機地址)
-
mailto
- 訪問的是電子郵件地址通砍,格式是mailto:
-
FTP
- 訪問的是共享主機的文件資源玛臂,格式是ftp://
HTTP協(xié)議的作用
-
HTTP
的全稱是Hypertext Transfer Protocol,超文本傳輸協(xié)議
- 規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
- 讓客戶端和服務(wù)器能有效地進(jìn)行數(shù)據(jù)溝通
HTTP協(xié)議的特點
-
簡單快速
- 因為HTTP協(xié)議簡單封孙,所以HTTP服務(wù)器的程序規(guī)模小迹冤,因而通信速度很快
-
靈活
- HTTP允許傳輸各種各樣的數(shù)據(jù)
-
HTTP 0.9和1.0使用非持續(xù)連接
- 限制每次連接只處理一個請求,服務(wù)器對客戶端的請求做出響應(yīng)后虎忌,馬上斷開連接泡徙,這種方式可以節(jié)省傳輸時間
HTTP的基本通信過程
- 完整的http通信可以分為2大步驟
請求:客戶端向服務(wù)器索要數(shù)據(jù)
響應(yīng):服務(wù)器返回客戶端相應(yīng)的數(shù)據(jù)
HTTP POST GET
- 在HTTP/1.1協(xié)議中,定義了8種發(fā)送http請求的方法
GET膜蠢、POST堪藐、OPTIONS、HEAD挑围、PUT礁竞、DELETE、TRACE杉辙、CONNECT模捂、PATCH
- 根據(jù)HTTP協(xié)議的設(shè)計初衷,不同的方法對資源有不同的操作方式
- PUT :增
- DELETE :刪
- POST:改
- GET:查
- 最常用的是GET和POST(實際上GET和POST都能辦到增刪改查)
GET和POST對比
- GET和POST的主要區(qū)別表現(xiàn)在數(shù)據(jù)傳遞上
GET
*在請求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù)蜘矢,多個參數(shù)之間用&隔開狂男,比如
http://ww.test.com/login?username=123&pwd=234&type=JSON
由于瀏覽器和服務(wù)器對URL長度有限制,因此在URL后面附帶的參數(shù)是有限制的品腹,通常不能超過1KB-
POST
- 發(fā)給服務(wù)器的參數(shù)全部放在請求體中
理論上并淋,POST傳遞的數(shù)據(jù)量沒有限制(具體還得看服務(wù)器的處理能力)
- 發(fā)給服務(wù)器的參數(shù)全部放在請求體中
GET和POST的選擇
- 選擇GET和POST的建議
- 如果要
傳遞大量數(shù)據(jù),比如文件上傳珍昨,只能用POST請求
-
GET的安全性比POST要差些
,如果包含機密\敏感信息,建議用POST - 如果
僅僅是索取數(shù)據(jù)(數(shù)據(jù)查詢)镣典,建議使用GET
- 如果是
增加兔毙、修改、刪除數(shù)據(jù)兄春,建議使用POST
HTTP通信過程 - 請求
- HTTP協(xié)議規(guī)定:1個完整的由客戶端發(fā)給服務(wù)器的HTTP請求中包含以下內(nèi)容
// 請求頭:包含了對客戶端的環(huán)境描述澎剥、客戶端請求信息等
GET /minion.png HTTP/1.1 // //包含了請求方法、請求資源路徑赶舆、HTTP協(xié)議版本
Host: 120.25.226.186:32812 // 客戶端想訪問的服務(wù)器主機地址
User-Agent: Mozilla/5.0 // 客戶端的類型哑姚,客戶端的軟件環(huán)境
Accept: text/html, */* // 客戶端所能接收的數(shù)據(jù)類型
Accept-Language: zh-cn // 客戶端的語言環(huán)境
Accept-Encoding: gzip // 客戶端支持的數(shù)據(jù)壓縮格式
// 請求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù),比如文件數(shù)據(jù)(POST請求才會有)
HTTP通信過程 - 響應(yīng)
- 客戶端向服務(wù)器發(fā)送請求芜茵,服務(wù)器應(yīng)當(dāng)做出響應(yīng)叙量,即返回數(shù)據(jù)給客戶端
// HTTP協(xié)議規(guī)定:1個完整的HTTP響應(yīng)中包含以下內(nèi)容
// 響應(yīng)頭:包含了對服務(wù)器的描述、對返回數(shù)據(jù)的描述
HTTP/1.1 200 OK // 包含了HTTP協(xié)議版本九串、狀態(tài)碼绞佩、狀態(tài)英文名稱
Server: Apache-Coyote/1.1 // 服務(wù)器的類型
Content-Type: image/jpeg // 返回數(shù)據(jù)的類型
Content-Length: 56811 // 返回數(shù)據(jù)的長度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 響應(yīng)的時間
// 響應(yīng)體:服務(wù)器返回給客戶端的具體數(shù)據(jù),比如文件數(shù)據(jù)
iOS中發(fā)送HTTP請求的方案
-
在iOS中猪钮,常見的發(fā)送HTTP請求的方案有
- 蘋果原生(自帶)
-
NSURLConnection
:用法簡單品山,最古老最經(jīng)典最直接的一種方案【坑比較多】 -
NSURLSession
:功能比NSURLConnection更加強大,蘋果目前比較推薦使用這種技術(shù)【2013推出烤低,iOS7開始出的技術(shù)】 -
CFNetwork
:NSURL*的底層肘交,純C語言
-
第三方框架
-
ASIHttpRequest
:外號“HTTP終結(jié)者”,功能極其強大扑馁,可惜早已停止更新 -
AFNetworking
:簡單易用涯呻,提供了基本夠用的常用功能,維護(hù)和使用者多 -
MKNetworkKit
:簡單易用檐蚜,維護(hù)和使用者少
-
NSURLConnection
- 使用
NSURLConnection
發(fā)送請求的步驟-
創(chuàng)建一個
NSURL對象魄懂,設(shè)置請求路徑` 傳入NSURL創(chuàng)建一個NSURLRequest對象,設(shè)置請求頭和請求體
使用NSURLConnection發(fā)送請求
-
JSON
- 什么是
JSON
?-
JSON
是一種輕量級的數(shù)據(jù)格式闯第,一般用于數(shù)據(jù)交互
服務(wù)器返回給客戶端的數(shù)據(jù)市栗,一般都是JSON格式或者XML格式(文件下載除外)
-
// JSON的格式很像OC中的字典和數(shù)組
{"name" : "jack", "age" : 10}
{"names" : ["jack", "rose", "jim"]}
// 標(biāo)準(zhǔn)JSON格式的注意點:key必須用雙引號
- 要想從JSON中挖掘出具體數(shù)據(jù),得對JSON進(jìn)行解析
JSON 轉(zhuǎn)換為 OC數(shù)據(jù)類型
JSON解析方案
- 在iOS中咳短,JSON的常見解析方案有4種
- 第三方框架:
JSONKit
填帽、SBJson
、TouchJSON
(性能從左到右咙好,越差) - 蘋果原生(自帶):
NSJSONSerialization
(性能最好)
- 第三方框架:
Reachability
在網(wǎng)絡(luò)應(yīng)用中篡腌,需要對用戶設(shè)備的網(wǎng)絡(luò)狀態(tài)進(jìn)行實時監(jiān)控,目的是
讓用戶了解自己的網(wǎng)絡(luò)狀態(tài)勾效,防止一些誤會(比如怪應(yīng)用無能)
-
根據(jù)用戶的網(wǎng)絡(luò)狀態(tài)進(jìn)行智能處理嘹悼,節(jié)省用戶流量叛甫,提高用戶體驗
- WIFI\3G網(wǎng)絡(luò):自動下載高清圖片
- 低速網(wǎng)絡(luò):只下載縮略圖
- 沒有網(wǎng)絡(luò):只顯示離線的緩存數(shù)據(jù)
-
蘋果官方提供了一個叫Reachability的示例程序,便于開發(fā)者檢測網(wǎng)絡(luò)狀態(tài)
NSURLSession
NSURLSession
是iOS7中新的網(wǎng)絡(luò)接口杨伙,它與NSURLConnection
是并列的其监。在程序在前臺時,NSURLSession
與NSURLConnection
可以互為替代工作限匣。注意抖苦,如果用戶強制將程序關(guān)閉,NSURLSession會斷掉-
使用步驟
- 使用
NSURLSession
對象創(chuàng)建Task
米死,然后執(zhí)行Task
- 使用
-
Task的類型
-
NSURLSessionTask
-
NSURLSessionDataTask
NSURLSessionUploadTask
NSRULSessionDownloadTask
-
-
-
詳細(xì)介紹 (別人家的博客)
NSURLSessionConfiguration
NSURLSessionConfiguration對象用于初始化NSURLSession對象锌历。
展開請求級別中與
NSMutableURLRequest
相關(guān)的可供選擇的方案,我們可以看到NSURLSessionConfiguration
對于會話如何產(chǎn)生請求峦筒,提供了相當(dāng)多的控制和靈活性究西。從網(wǎng)絡(luò)訪問性能,到cookie勘天,安全性怔揩,緩存策略,自定義協(xié)議脯丝,啟動事件設(shè)置商膊,以及用于移動設(shè)備優(yōu)化的幾個新屬性,你會發(fā)現(xiàn)你一直在尋找的宠进,正是NSURLSessionConfiguration
晕拆。會話在初始化時復(fù)制它們的配置,
NSURLSession
有一個只讀的配置屬性材蹬,使得該配置對象上的變化對這個會話的政策無效实幕。配置在初始化時被讀取一次,之后都是不會變化的堤器。想要查看更多關(guān)于后臺會話的信息昆庇,可以查看WWDC Session 204: “What’s New with Multitasking”
AFN
-
什么是AFN?
- 全稱是
AFNetworking
,是對NSURLConnection的一層封裝
- 雖然運行效率沒有ASI高闸溃,但是使用比ASI簡單
在iOS開發(fā)中整吆,使用比較廣泛
- 全稱是
-
AFN的github地址
UIWebView
-
什么是
UIWebView
?-
UIWebView
是iOS內(nèi)置的瀏覽器控件 系統(tǒng)自帶的Safari瀏覽器就是通過UIWebView實現(xiàn)的
-
-
UIWebView
不但能加載遠(yuǎn)程的網(wǎng)頁資源,還能加載絕大部分的常見文件- html\htm
- pdf辉川、doc表蝙、ppt、txt
- mp4
- … …
-
UIWebView
常用的加載資源的方法- (void)loadRequest:(NSURLRequest *)request;