我想知道,新分配的对象是否可以以前使用过Firestore
(基本上是从我假定的内存地址中推断出来的)。
我正在使用关联对象的这种简单实现,想知道这是否会使事情搞砸。
如果一个新对象实际上可以有一个以前使用过的地址,我想知道我们如何知道已释放了一些东西并清理了现有的关联。
Firestore.instance.runTransaction((transaction) async {
await transaction.set(Firestore.instance.collection("your_collection").document(), {
'replyName': replyName,
'replyText': replyText,
'replyVotes': replyVotes,
});
});
答案 0 :(得分:0)
ObjectIdentifiers(内存地址)确实可以重复使用,这一简单的代码片段证明了这一点
class C {}
print(ObjectIdentifier(C()))
print(ObjectIdentifier(C()))
了解何时取消分配对象的最好方法是轮询一个弱变量:
class C {}
var o: C? = C()
weak var weakO = o
print("weakO == nil \(weakO == nil)")
o = nil
print("weakO == nil \(weakO == nil)")
或者,为方便起见,这种方式既可以跟踪对象ID,也可以跟踪对象是否仍在周围的知识:
class C {}
class ObjectWrapper {
weak var object: AnyObject?
var hash: Int
init(_ object: AnyObject) {
self.object = object
hash = ObjectIdentifier(object).hashValue
}
}
var obj1: C? = C()
let wrapper1 = ObjectWrapper(obj1!)
obj1 = nil
var obj2: C? = C()
let wrapper2 = ObjectWrapper(obj2!)
print("obj1 == nil: \(wrapper1.object == nil), hash: \(wrapper1.hash)")
print("obj2 == nil: \(wrapper2.object == nil), hash: \(wrapper2.hash)")