У меня есть базовое понимание ARC, но в следующем примере я неожиданно запутался.
FeedViewController
имеет строгую ссылку NetworkHelper
, тогда у NetworkHelper
есть функция, которая принимает закрытиеи назовите его позже.
Так вот путаница: замыкание передается от FeedViewController
к NetworkHelper
, и этот блок не сохраняется внутри NetworkHelper
, так почему NetworkHelper
имеет сильныйссылка NetworkHelper
?об этом говорится в статье, но я просто не могу понять, почему.Это имеет смысл для меня только в том случае, если NetworkHelper
сохранит сильную ссылку на блок.
class NetworkHelper {
func getFeed(completion: @escaping ([FeedItem]) -> Void) {
Alamofire.request(…).responseJSON { (response) in
if let value = response.result.value {
if let json = JSON(value)[Constants.items].array {
completion(json.flatMap(FeedItem.init))
}
}
}
}
}
class FeedViewController {
var tableView: UITableViewController
var feedItems: [FeedItem]
var networkHelper: NetworkHelper
override func viewDidLoad() {
...
networkHelper.getFeed() { items in
self.feedItems = items
self.tableView.reloadData()
}
}
}