我厌倦了在闭包中使用[weak self]
捕获,因此我想传递self并在闭包中返回它,如下所示:
alertManager.askToConfirm(from: self) { vc, confirmed in
if confirmed {
vc.model.confirm()
} else {
vc.model.reject()
}
}
在AlertManager
内部,我的代码如下:
func askToConfirm<T>(from vc: T, completion: @escaping (T) -> ()) {
let invitation = pageItemFactory.createConfirmationPageItem() { [weak self] accepted in
self?.dismissAlert()
completion(vc, accepted)
}
present(invitation)
}
这会创建一个保留周期吗?
答案 0 :(得分:0)
不,据我所知,这不会导致保留周期。
例如,此将导致保留周期。当执行SELECT item_id,COUNT(*) AS quantity,driver_id FROM `table`
GROUP BY item_id,driver_id
时,myFunction
实例将对Foo
块具有强烈的引用。反过来,completion
块拥有对completion
实例的强引用。这将是一个保留周期,在这种情况下,您需要添加捕获列表。
Foo