swift - 是一个属性的 setter/getter ,可以避免捕获内部 block

标签 swift closures self

例如,我有以下 Controller :

class MyController : UIViewController
{
    var capturedProperty : Property?

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

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

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

现在,尽管我认为对属性进行 setter/getter 不应影响 self 是否被捕获,但我仍然不确定。

有人可以快速解释一下这个例子吗?

最佳答案

不,这不会影响捕获。

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

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

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

关于swift - 是一个属性的 setter/getter ,可以避免捕获内部 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459945/

相关文章:

swift - 什么是 UnsafeBufferPointer 的唯一性检查?

swift - 点击特定行时如何从 Firestore 获取特定信息

javascript - 如何将参数传递给使用 setTimeout 调用的函数?

javascript - 我需要 Javascript 闭包吗?

ruby-on-rails-3 - Ruby on Rails 3 : Setters and Getters and self inside a controller method

swift - 为什么 self 与 init 一起使用而不是 color

swift - 我想将数据(UILabel)传递给另一个没有按钮的 View Controller 中的UILabel

ios - 使用 XCTest 测试其中包含 `try-catch` 的方法

java - JAVA中的static Initializer是闭包吗

mysql - 如何将 MySQL 中不明确的别名解析为当前表的定义