你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 自己動手寫一個 iOS 網絡請求庫(一)—— NSURLSession 初探

自己動手寫一個 iOS 網絡請求庫(一)—— NSURLSession 初探

編輯:IOS開發基礎

代碼示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary

開源項目:Pitaya,適合大文件上傳的 HTTP 請求庫:https://github.com/johnlui/Pitaya

本系列文章中,我們將嘗試使用 NSURLSession 技術構建一個自己的網絡請求庫。

NSURLSession 簡介

NSURLSession 是 iOS7 引入的新網絡請求接口,在 WWDC2013 中有詳細介紹,下面是描述其結構的一頁 slides:

1.jpg

當應用在前台時,NSURLSession 跟 NSURLConnection 沒有什麼區別,但是在程序切換到後台之後 Background Session 就會更加靈活。

嘗試 NSURLSession

准備工作

新建一個名為 BuildYourHTTPRequestLibrary 的單頁面應用,在頁面上居中放置一個按鈕,名為 Request:

2.jpg

拖動綁定 Touch Up Inside 事件:

3.jpg

4.jpg

使用 NSURLSession

在 mainButtonBeTapped 函數內填充以下代碼:

@IBAction func mainButtonBeTapped(sender: AnyObject) {
    let session = NSURLSession.sharedSession()
    let request = NSURLRequest(URL: NSURL(string: "http://baidu.com")!)
    let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        let string = NSString(data: data, encoding: NSUTF8StringEncoding)
        println(string)
    })
    task.resume()
}

運行項目,點擊按鈕,查看結果:

5.jpg

使用成功!

感受異步

異步

改寫 mainButtonBeTapped 函數的代碼:

@IBAction func mainButtonBeTapped(sender: AnyObject) {
    let session = NSURLSession.sharedSession()
    let request = NSURLRequest(URL: NSURL(string: "http://baidu.com")!)
    let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
        println("just wait for 5 seconds!")
        sleep(5)
        let string = NSString(data: data, encoding: NSUTF8StringEncoding)
        println(string)
    })
    task.resume()
}

再次嘗試,兩次打印之間間隔了五秒,主線程未阻塞,證明 NSURLSession 為異步執行。

阻塞

嘗試多次點擊,我們能夠看到每五秒執行一次,直到全部執行完畢。

NSURLSession 采用的是 “異步阻塞” 模型,即所有請求在發出後都進入 2# 線程執行,在 2# 線程內部按照阻塞隊列模式執行。

下一步:自己動手寫一個 iOS 網絡請求庫(二)——封裝接口

下一步:自己動手寫一個 iOS 網絡請求庫(三)——降低耦合

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved