[英]When should/must I declare/instantiate ReactiveCocoa objects as stored properties versus local variables?
(適用於ReactiveCocoa
4或3)
在我看到的大多數示例和案例中,將用戶界面連接到數據所涉及的ReactiveCocoa
對象(例如MutableProperty<TVal, TErr>
或SignalProducer<TVal, TErr>
至少在某些setupBindings
或構造函數中調用的類似方法中實例化。 。
我遇到過幾種情況,當我將對象的聲明從作用域移動到存儲的屬性時,我突然有了一些無法工作的代碼,這些代碼突然“起作用”,反之亦然。 例如,用偽代碼:
class Wtf {
// doesn't work
init() {
let prop = MutableProperty<Dah, Dah>()...
doSomethingWith(prop)
}
// also doesn't work
private let prop: MutableProperty<Dah, Dah> = MutableProperty<Dah, Dah>(Dah())
init() {
doSomethingWith(prop)
}
// works?
private let prop: MutableProperty<Dah, Dah>
init() {
prop = MutableProperty<Dah, Dah>(Dah())
doSomethingWith(prop)
}
}
因此,似乎有一些基本問題。
給定一些ReactiveCocoa
對象...
let
或var
)與局部實例變量? return
函數? MutableProperty
是一個class
。 換句話說:它具有參考語義。 與Signal
(生命周期取決於終止事件 )不同, property
的生命周期由所有者定義。 如果沒有對象持有對屬性的引用,則將其釋放。
因此,您問題的答案通常是將其存儲在另一個類中。
常見的做法是將MutableProperty
private
,並且只公開可讀的內容:
final class Owner {
private let mutableProperty = MutableProperty<Type?>(nil)
public var property: AnyProperty<Type?> {
return AnyProperty(self.mutableProperty)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.