iOS - 弱var仍然会导致保留周期?

时间:2015-09-13 16:06:20

标签: ios retain-cycle

这是我的真实代码:

@IBOutlet weak var contentTextView: SmartTextView! {
    didSet {
        self.contentTextView.onDidBeginEditing = {
            $0.layer.borderColor = Util.green.CGColor
        }
        self.contentTextView.onDidEndEditing = {
            $0.layer.borderColor = Util.gray.CGColor
        }
        self.contentTextView.layer.borderWidth = 1 / Util.screenScale
        self.contentTextView.layer.borderColor = Util.gray.CGColor
        self.contentTextView.minHeight = 148
        self.contentTextView.maxHeight = 148
        self.contentTextView.onChange = { [unowned self] text in
            var content = text.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "\n\t"))
            self.contentLenthLabel.text = "\(self.MAX_CONTENT - count(content))"
        }
    }
}

如果我删除[unowned self]语句,我可以在工具中看到保留周期问题。

KVO或其他什么东西使弱变量仍然会导致保留周期?

1 个答案:

答案 0 :(得分:2)

weak引用是红鲱鱼;它与这里的故事无关。如果没有[unowned self],您将保留此视图,此视图会保留您。这是一个保留周期:

  • UIViewController保留其视图

  • 查看保留其子视图;其中一个子视图是SmartTextView

  • SmartTextView保留onChange功能

  • 除非您说self,否则函数会保留unowned self(UIViewController)。