Представьте себе ситуацию, когда вы хотите асинхронно нагрузки текста с сервера и отобразить результат в ViewController's
UITextField
.Swift закрытия [слабые] самостоятельно и асинхронные задачи
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
//... some long running async operation
if let textResponse = responseFromServer {
dispatch_async(dispatch_get_main_queue(), { [weak self]() in
self?.textField.text = textResponse
})
}
})
A.) Мне нужно использовать [слабые себя] в замыкании используется для асинхронных вызовов ли?
Я думал, что мне нужно, но я не уверен, что после того, как я прочитал Q/A здесь, в StackOverflow и прошел через довольно много приложений с открытым исходным кодом, которые не используют [слабое я] для асинхронных задач + закрытий.
т.е .:
Единственный раз, когда вы действительно хотите использовать [бесхозный себя] или [слабый себя], когда вы должны создать сильный опорный цикл. (Shall we always use [unowned self] inside closure in Swift)
Там нет сильного опорного цикла в моем случае.
или:
Но ясно, он все равно будет лучше использовать сильную ссылку в это обстоятельство. (Swift ARC and blocks)
Б.) Скажем, это хорошо идти с сильной ссылкой. Что происходит с ViewController, когда пользователь переходит на другую страницу в середине загрузки async? Будет ли он сохранять невидимый ViewController в памяти приложения до завершения задачи async?