传递自我并将其归还闭包而没有保留周期

时间:2019-05-30 10:22:56

标签: ios swift memory closures

我厌倦了在闭包中使用[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)
}

这会创建一个保留周期吗?

1 个答案:

答案 0 :(得分:0)

不,据我所知,这不会导致保留周期。


例如,此导致保留周期。当执行SELECT item_id,COUNT(*) AS quantity,driver_id FROM `table` GROUP BY item_id,driver_id 时,myFunction实例将对Foo块具有强烈的引用。反过来,completion块拥有对completion实例的强引用。这将是一个保留周期,在这种情况下,您需要添加捕获列表。

Foo