亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有NSBlockOperation和隊列的NSURLSession

帶有NSBlockOperation和隊列的NSURLSession

iOS
烙印99 2019-11-11 13:19:54
我有一個目前NSURLConnection用于絕大多數網絡的應用程序。我想轉到這里,NSURLSession因為Apple告訴我這是要走的路。我的應用程序僅NSURLConnection通過+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)errorclass方法使用的同步版本。我這樣做NSBlockOperation是NSOperationQueue為了避免不必要地阻塞主隊列。用這種方式做事的最大好處是,我可以使操作相互依賴。例如,我可以讓請求數據的任務取決于登錄任務的完成。我尚未在中看到任何對同步操作的支持NSURLSession。我所能找到的只是文章,甚至欺騙了我,甚至考慮同步使用它,而且我是阻塞線程的可怕人。精細。但是我看不到任何使NSURLSessionTask彼此依賴的方法。有沒有辦法做到這一點?還是有關于我將如何以其他方式做這樣的事情的描述?
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

如果基于信號量的方法不起作用,請嘗試基于輪詢的方法。


var reply = Data()

/// We need to make a session object.

/// This is key to make this work. This won't work with shared session.

let conf = URLSessionConfiguration.ephemeral

let sess = URLSession(configuration: conf)

let task = sess.dataTask(with: u) { data, _, _ in

    reply = data ?? Data()

}

task.resume()

while task.state != .completed {

    Thread.sleep(forTimeInterval: 0.1)

}

FileHandle.standardOutput.write(reply)

基于輪詢的方法非??煽康毓ぷ?,但是有效地將最大吞吐量限制為輪詢間隔。在此示例中,它被限制為10次/秒。


我為此做了一個Swift包。

到目前為止,基于信號量的方法已經很好地工作了,但是自Xcode 11時代以來,它就被打破了。(也許只適合我嗎?)


如果我等待信號量,數據任務不會完成。如果我在其他線程上等待信號量,則該任務將失敗并顯示錯誤。


nw_connection_copy_protocol_metadata [C2] Client called nw_connection_copy_protocol_metadata on unconnected nw_connection error.

隨著蘋果公司的發展,實施似乎有所改變Network.framework。


查看完整回答
反對 回復 2019-11-11
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

我鼓勵您發布答復作為解決方案NSURLSession.dataTaskWithURL(_:completionHandler:):


此方法旨在替代NSURLConnection的sendAsynchronousRequest:queue:completionHandler:方法,并具有支持自定義身份驗證和取消的附加功能。


查看完整回答
反對 回復 2019-11-11
  • 3 回答
  • 0 關注
  • 584 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號