回顧, 總結(jié)

iOS程序啟動過程

  1. 執(zhí)行Main函數(shù)
  2. 執(zhí)行UIApplication Main函數(shù)
  3. 初始化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

  • 使用步驟:
    1. 初始化
    2. 設(shè)置為UIWindowrootViewControllerUINavigationController
    3. 根據(jù)具體情況, 子控制器進(jìn)行pushpop

UIStoryboardSegue

  • Storyboard上每一根用來界面跳轉(zhuǎn)的線捞奕,都是一個UIStoryboardSegue對象(簡稱Segue
  • 根據(jù)跳轉(zhuǎn)方式可分為兩種類型
    1. 自動型:點擊某個控件后(比如按鈕),自動執(zhí)行Segue,自動完成界面跳轉(zhuǎn)
    2. 手動型:需要通過寫代碼手動執(zhí)行Segue,才能完成界面跳轉(zhuǎn)
      • [self performSegueWithIdentifier:@"login2contacts" sender:nil];
      • Segue必須由來源控制器來執(zhí)行颈嚼,也就是說,這個perform方法必須由來源控制器來調(diào)用

多控制器數(shù)據(jù)傳遞方式

  1. 順傳
  2. 逆?zhèn)?/li>
  3. 傳遞方式推薦:使用代理, 或監(jiān)聽-發(fā)布

UITabBarController

  • 使用步驟
    1. 初始化控件
    2. 設(shè)置UIWindowrootViewController
    3. 根據(jù)具體情況, 通過addChildViewController添加子控制器

Modal

  • 除了push之外, 還有modal切換控制器
  • 任何控制器都可以使用Modal的形式展示出來
  • Modal默認(rèn)效果是從下至上, 直到覆蓋整個屏幕

事件

  • iOS中的事件可以分為3大類
    1. 觸摸事件
    2. 加速事件
    3. 遠(yuǎn)程控制事件
  • 注意
    1. 只有繼承了UIResponse的對象才能處理事件, 它們稱之為響應(yīng)者對象
    2. UIApplication呢堰、UIViewController驻谆、UIView都繼承自UIResponder,因此它們都是響應(yīng)者對象奈嘿,都能夠接收并處理事件

UITouch

  • 當(dāng)用戶用一根手指觸摸屏幕時貌虾,會創(chuàng)建一個與手指相關(guān)聯(lián)的UITouch對象
  • 一根手指對應(yīng)一個UITouch對象
  • UITouch的作用
    1. 保存著跟手指相關(guān)的信息,比如觸摸的位置裙犹、時間尽狠、階段
    2. 當(dāng)手指移動時,系統(tǒng)會更新同一個UITouch對象叶圃,使之能夠一直保存該手指在的觸摸位置
    3. 當(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是一個二維繪圖引擎锌奴,同時支持iOSMac系統(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的步驟
    1. 新建一個類,繼承自UIView
    2. 實現(xiàn)- (void)drawRect:(CGRect)rect方法斩熊,然后在這個方法中
      • 取得跟當(dāng)前view相關(guān)聯(lián)的圖形上下文
      • 繪制相應(yīng)的圖形內(nèi)容
      • 利用圖形上下文將繪制的所有內(nèi)容渲染顯示到view上面

CALayer

  • iOS中往枣,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文本標(biāo)簽婉商、一個文本輸入框似忧、一個圖標(biāo)等等,這些都是UIView
  • UIView之所以能顯示在屏幕上丈秩,完全是因為它內(nèi)部的一個CALayer圖層
  • 在創(chuàng)建UIView對象時盯捌,UIView內(nèi)部會自動創(chuàng)建一個圖層(即CALayer對象),通過UIViewlayer屬性可以訪問這個層
  • 當(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,我們可用稱這個LayerRoot Layer(根層)

  • 所有的非Root Layer肥印,也就是手動創(chuàng)建的CALayer對象识椰,都存在著隱式動畫

  • 什么是隱式動畫?

    • 當(dāng)對非Root Layer的部分屬性進(jìn)行修改時深碱,默認(rèn)會自動產(chǎn)生一些動畫效果
      而這些屬性稱為Animatable Properties(可動畫屬性)
  • 列舉幾個常見的Animatable Properties:

    • bounds:用于設(shè)置CALayer的寬度和高度腹鹉。修改這個屬性會產(chǎn)生縮放動畫
    • backgroundColor:用于設(shè)置CALayer的背景色。修改這個屬性會產(chǎn)生背景色的漸變動畫
    • position:用于設(shè)置CALayer的位置敷硅。修改這個屬性會產(chǎn)生平移動畫

核心動畫

  • Core Animation簡介

    1. Core Animation功咒,中文翻譯為核心動畫,它是一組非常強大的動畫處理API绞蹦,使用它能做出非常炫麗的動畫效果力奋,而且往往是事半功倍。也就是說坦辟,使用少量的代碼就可以實現(xiàn)非常強大的功能刊侯。
    2. Core Animation可以用在Mac OS XiOS平臺。
    3. Core Animation的動畫執(zhí)行過程都是在后臺操作的锉走,不會阻塞主線程。
    4. Core Animation是直接作用在CALayer上的藕届,并非UIView

轉(zhuǎn)場動畫: CATransition

  • CATransitionCAAnimation的子類挪蹭,用于做轉(zhuǎn)場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果休偶。iOS比Mac OS X的轉(zhuǎn)場動畫效果少一點
  • UINavigationController就是通過CATransition實現(xiàn)了將控制器的視圖推入屏幕的動畫效果

CADisplayLink

  • CADisplayLink是一種以屏幕刷新頻率觸發(fā)的時鐘機制梁厉,每秒鐘執(zhí)行大約60次左右
  • CADisplayLink是一個計時器,可以使繪圖代碼與視圖的刷新頻率保持同步,而NSTimer無法確保計時器實際被觸發(fā)的準(zhǔn)確時間
  • 使用方法:
    1. 定義CADisplayLink并制定觸發(fā)調(diào)用方法
    2. 將顯示鏈接添加到主運行循環(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個進(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)勢
    1. GCD是蘋果公司為多核并行運算提出的解決方案
    2. GCD會自動利用更多的CPU內(nèi)核(比如雙核巾乳、四核)
    3. GCD會自動管理線程的生命周期(創(chuàng)建線程您没、調(diào)度任務(wù)、銷毀線程)
    4. 程序員只需要告訴GCD想要執(zhí)行什么任務(wù)胆绊,不需要編寫任何線程管理代碼
  • GCD中有2個核心概念

    • 任務(wù):執(zhí)行什么操作
    • 隊列:用來存放任務(wù)
  • GCD的使用2個步驟

    1. 定制任務(wù)
      • 確定想做的事情
    2. 將任務(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的作用

    • 配合使用NSOperationNSOperationQueue也能實現(xiàn)多線程編程
  • NSOperationNSOperationQueue實現(xiàn)多線程的具體步驟

    1. 先將需要執(zhí)行的操作封裝到一個NSOperation對象中
    2. 然后將NSOperation對象添加到NSOperationQueue
    3. 系統(tǒng)會自動將NSOperationQueue中的NSOperation取出來
    4. 將取出的NSOperation封裝的操作放到一條新線程中執(zhí)行
  • NSOperation的子類

    • NSOperation是個抽象類仆抵,并不具備封裝操作的能力,必須使用它的子類
  • 使用NSOperation子類的方式有3種

    • NSInvocationOperation
    • NSBlockOperation
    • 自定義子類繼承NSOperation,實現(xiàn)內(nèi)部相應(yīng)的方法

RunLoop

RunLoop對象

  • iOS中有2套API來訪問和使用RunLoop

    1. Foundation
      • NSRunLoop
    2. Core Foundation
      • CFRunLoopRef
  • NSRunLoopCFRunLoopRef都代表著RunLoop對象

  • NSRunLoop是基于CFRunLoopRef的一層OC包裝镣丑,所以要了解RunLoop內(nèi)部結(jié)構(gòu)舔糖,需要多研究CFRunLoopRef層面的API(Core Foundation層面)

RunLoop資料

蘋果官方文檔
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

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的基本格式 = 協(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ù)器的處理能力)

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ā)送請求的步驟
    1. 創(chuàng)建一個NSURL對象魄懂,設(shè)置請求路徑`
    2. 傳入NSURL創(chuàng)建一個NSURLRequest對象,設(shè)置請求頭和請求體
    3. 使用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填帽、SBJsonTouchJSON(性能從左到右咙好,越差)
    • 蘋果原生(自帶):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是并列的其监。在程序在前臺時,NSURLSessionNSURLConnection可以互為替代工作限匣。注意抖苦,如果用戶強制將程序關(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;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乓旗,一起剝皮案震驚了整個濱河市府蛇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屿愚,老刑警劉巖汇跨,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件务荆,死亡現(xiàn)場離奇詭異,居然都是意外死亡扰法,警方通過查閱死者的電腦和手機蛹含,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塞颁,“玉大人,你說我怎么就攤上這事吸耿』牡洌” “怎么了霎烙?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我览绿,道長,這世上最難降的妖魔是什么幻锁? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任敞映,我火速辦了婚禮,結(jié)果婚禮上糕珊,老公的妹妹穿的比我還像新娘动分。我一直安慰自己,他們只是感情好红选,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布澜公。 她就那樣靜靜地躺著,像睡著了一般喇肋。 火紅的嫁衣襯著肌膚如雪坟乾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天蝶防,我揣著相機與錄音甚侣,去河邊找鬼。 笑死间学,一個胖子當(dāng)著我的面吹牛殷费,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播菱鸥,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼宗兼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氮采?” 一聲冷哼從身側(cè)響起殷绍,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹊漠,沒想到半個月后主到,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茶行,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年登钥,在試婚紗的時候發(fā)現(xiàn)自己被綠了畔师。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡牧牢,死狀恐怖看锉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塔鳍,我是刑警寧澤伯铣,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站轮纫,受9級特大地震影響腔寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掌唾,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一放前、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糯彬,春花似錦凭语、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至却舀,卻和暖如春虫几,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挽拔。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工辆脸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人螃诅。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓啡氢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親术裸。 傳聞我的和親對象是個殘疾皇子倘是,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件袭艺、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,135評論 30 470
  • ? 深拷貝同淺拷貝的區(qū)別:淺拷貝是指針拷貝搀崭,對一個對象進(jìn)行淺拷貝,相當(dāng)于對指向?qū)ο蟮闹羔樳M(jìn)行復(fù)制猾编,產(chǎn)生一個新的指向...
    WSGNSLog閱讀 1,251評論 0 1
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,340評論 7 249
  • 把網(wǎng)上的一些結(jié)合自己面試時遇到的面試題總結(jié)了一下驴党,以后有新的還會再加進(jìn)來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,553評論 0 20