URLSessionで再帰的に通信を行う処理を書いています。
URLSessionTaskを何回かresumeすると以下のようなエラーが発生し、クラッシュすることがあります。
・エラー発生箇所
Queue : com.apple.CFNetwork.LoaderQ (serial)
・エラー内容
EXC_BAD_ACCESS (code=1, address=0x0)
URLSessionを短時間に複数行うとクラッシュするのでしょうか。
また、再帰的に通信を行いたい場合上記エラーを回避することは可能でしょうか。
調べたところ、以下のような記事が見つかりました。
https://www.366service.com/jp/qa/9033c51b6c877350e25c2dc2a562099e
実機でもクラッシュが起きたので、違うと考えていますが、appleのバグという可能性もあるのでしょうか。
以下にPlaygroundで動作確認したコードを記述いたします。
試しに100回ループさせたところ途中でクラッシュしました。
swift
1import Foundation 2 3test(url: "",num: 0); 4 5func test(url:String, num:Int){ 6 7 requestSync(urlString: url) { 8 print(num) 9 if(num < 100){ 10 test(url: url, num: num + 1) 11 } 12 13 } 14} 15 16func requestSync(urlString:String,handler:@escaping()->Void){ 17 18 let semaphore = DispatchSemaphore(value: 0) 19 20 let session = URLSession(configuration: .default) 21 let url = URL(string: urlString)! 22 let request = URLRequest(url: url) 23 24 let task = session.dataTask(with: request) { (data, response, error) in 25 handler() 26 semaphore.signal() 27 } 28 29 task.resume() 30 semaphore.wait() 31}
あなたの回答
tips
プレビュー