是 getter 在 属性 上保存自己免于捕获内部块
Is a getter over a property saving self from capturing inside block
例如我有以下控制器:
class MyController : UIViewController
{
var capturedProperty : Property?
func getterForCapturedProperty() -> Property?
{
return capturedProperty
}
func viewDidAppear()
{
NetworkOperationBlock{
someResult -> Void in
self.getterForCapturedProperty().result = someResult
}
}
}
现在虽然我认为在 属性 上制作 getter 应该不会影响 self 是否被捕获,但我仍然不确定。
有人可以快速解释一下这个例子吗?
不,这不影响捕获。
如果您不希望该块具有对 self
的强引用,您应该将其标记为无主:
let myBlock: /* type */ = { [unowned self] in
// ...
}
更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html(向下滚动到 "Resolving Strong Reference Cycles for Closures")。
例如我有以下控制器:
class MyController : UIViewController
{
var capturedProperty : Property?
func getterForCapturedProperty() -> Property?
{
return capturedProperty
}
func viewDidAppear()
{
NetworkOperationBlock{
someResult -> Void in
self.getterForCapturedProperty().result = someResult
}
}
}
现在虽然我认为在 属性 上制作 getter 应该不会影响 self 是否被捕获,但我仍然不确定。
有人可以快速解释一下这个例子吗?
不,这不影响捕获。
如果您不希望该块具有对 self
的强引用,您应该将其标记为无主:
let myBlock: /* type */ = { [unowned self] in
// ...
}
更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html(向下滚动到 "Resolving Strong Reference Cycles for Closures")。