iOS - 弱 var 仍然会导致保留循环?
iOS - Weak var can still cause retain cycle?
这是我的真实代码:
@IBOutlet weak var contentTextView: SmartTextView! {
didSet {
self.contentTextView.onDidBeginEditing = {
[=11=].layer.borderColor = Util.green.CGColor
}
self.contentTextView.onDidEndEditing = {
[=11=].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]
语句,我会在 Instruments 中看到保留循环问题。
是 KVO 还是其他什么使得弱 var 仍然会导致保留周期?
weak
引用是一条红色鲱鱼;这与这里的故事无关。没有 [unowned self]
,你保留了这个视图,这个视图也保留了你。那是一个保留周期:
UIViewController 保留其视图
视图保留其子视图;其中一个子视图是 SmartTextView
SmartTextView保留onChange
功能
函数保留 self
(UIViewController) 除非你说 unowned self
.
这是我的真实代码:
@IBOutlet weak var contentTextView: SmartTextView! {
didSet {
self.contentTextView.onDidBeginEditing = {
[=11=].layer.borderColor = Util.green.CGColor
}
self.contentTextView.onDidEndEditing = {
[=11=].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]
语句,我会在 Instruments 中看到保留循环问题。
是 KVO 还是其他什么使得弱 var 仍然会导致保留周期?
weak
引用是一条红色鲱鱼;这与这里的故事无关。没有 [unowned self]
,你保留了这个视图,这个视图也保留了你。那是一个保留周期:
UIViewController 保留其视图
视图保留其子视图;其中一个子视图是 SmartTextView
SmartTextView保留
onChange
功能函数保留
self
(UIViewController) 除非你说unowned self
.