对于一个拯救自我的财产来说,是否能够捕获内部块

时间:2016-02-17 14:49:30

标签: swift closures self

例如,我有以下控制器:

class MyController : UIViewController
{
    var capturedProperty : Property?

    func getterForCapturedProperty() -> Property?
    {
        return capturedProperty
    }

    func viewDidAppear()
    {
        NetworkOperationBlock{
            someResult -> Void in

            self.getterForCapturedProperty().result = someResult
        } 
    }
}

现在即使我认为对财产进行掠夺不应该影响自我是否被捕获,但我仍然不确定。

有人能对这个例子做出快速解释吗?

1 个答案:

答案 0 :(得分:1)

不,这不会影响捕获。

如果您不希望该块具有对self的强引用,则应将其标记为无主:

let myBlock: /* type */ = { [unowned self] in
    // ...
}

更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html(向下滚动到“为闭包解析强引用周期”)。