Я выполняю запросы в цикле и вижу, что использование памяти становится неограниченным
Я думаю, что URLSessionDataTask
объекты не освобождаются URLSession
Мой код выглядит так
let base = "http://myserver.com"
let group = DispatchGroup()
// 10 requests in parallel
let semaphore = DispatchSemaphore(value: 10)
func request(s: String) {
var c = URLComponents(string: base)!
c.queryItems = [URLQueryItem(name: "uid", value: s)]
let url = c.url!
var request = URLRequest(url: url)
let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
semaphore.signal()
if let data = data {
let json = String(data: data, encoding: .utf8)
print("\(url) \(String(describing: json))")
}
}
semaphore.wait()
dataTask.resume()
}
// file with million ids
let fileName = "ids.txt"
let contents = try String(contentsOfFile: fileName)
let lines = contents.components(separatedBy: .newlines)
lines.forEach { (s) in
request(s: s) // make a request for each
}
EDIT
По комментариям я пытался обернуть с autorelease
, но все еще имеет рост памяти
lines.forEach { (s) in
autoreleasepool {
request(s: s)
}
}