我应该为Realm.write()使用[unowned self]吗?

时间:2018-01-24 11:10:20

标签: ios swift realm

我在应用中遇到了一些奇怪的内存问题,我想知道我是否在这里做了正确的事情。我使用Realm并且有例如:

try! self.realm.write {
    self.realm.add(newItem)
}

但是我想知道我是否会无意中造成保留周期,所以应该这样做:

try! self.realm.write { [unowned self] in
    self.realm.add(newItem)
}

哪个是正确的,为什么?

2 个答案:

答案 0 :(得分:4)

如果您查看write方法声明,您会看到闭包没有转义。因此,您不需要同时使用weakunowned。它不会导致保留周期。

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部分使用!,而是正确处理可能的错误情况。