我在应用中遇到了一些奇怪的内存问题,我想知道我是否在这里做了正确的事情。我使用Realm并且有例如:
try! self.realm.write {
self.realm.add(newItem)
}
但是我想知道我是否会无意中造成保留周期,所以应该这样做:
try! self.realm.write { [unowned self] in
self.realm.add(newItem)
}
哪个是正确的,为什么?
答案 0 :(得分:4)
如果您查看write
方法声明,您会看到闭包没有转义。因此,您不需要同时使用weak
和unowned
。它不会导致保留周期。
public func write(_ block: (() throws -> Void)) throws {
beginWrite()
do {
try block()
} catch let error {
if isInWriteTransaction { cancelWrite() }
throw error
}
if isInWriteTransaction { try commitWrite() }
}
答案 1 :(得分:0)
在不了解领域的情况下,我建议使用weak self
以防自己可能为零。
try! self.realm.write { [weak self] in
self?.realm.add(newItem)
}
并且可能会尝试避免对try部分使用!
,而是正确处理可能的错误情况。