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

Ios 我应该在Realm.write()中使用[unowned self]吗?,ios,swift,realm,Ios,Swift,Realm,我在一个应用程序中遇到了一些奇怪的内存问题,我想知道我在这里做的事情是否正确。我使用Realm并具有以下功能,例如: try! self.realm.write { self.realm.add(newItem) } 但我想知道我是否无意中造成了一个保留周期,所以我应该: try! self.realm.write { [unowned self] in self.realm.add(newItem) } 哪一个是正确的,为什么?在不太了解领域的情况下,我建议使用弱自我,以防

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

try! self.realm.write {
    self.realm.add(newItem)
}
但我想知道我是否无意中造成了一个保留周期,所以我应该:

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

哪一个是正确的,为什么?

在不太了解领域的情况下,我建议使用
弱自我
,以防自我可能为零

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

也许要尽量避免使用
用于try部分,而不是正确处理可能的错误情况。

在不太了解领域的情况下,我建议使用
弱self
,以防self可能为零

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

也许要尽量避免使用
用于try部分,而不是正确处理可能的错误情况。

如果查看
write
方法声明,您将看到闭包是非转义的。因此,您既不需要使用
也不需要使用
无主
。它不会导致保留周期

public func write(_ block: (() throws -> Void)) throws {
    beginWrite()
    do {
        try block()
    } catch let error {
        if isInWriteTransaction { cancelWrite() }
        throw error
    }
    if isInWriteTransaction { try commitWrite() }
}

如果您查看
write
方法声明,就会发现闭包是非转义的。因此,您既不需要使用
也不需要使用
无主
。它不会导致保留周期

public func write(_ block: (() throws -> Void)) throws {
    beginWrite()
    do {
        try block()
    } catch let error {
        if isInWriteTransaction { cancelWrite() }
        throw error
    }
    if isInWriteTransaction { try commitWrite() }
}

无主更改为弱
[weak self]
相关:无主更改为弱
[weak self]
相关:由于可选的self,您的代码将无法编译。关于
的注释
很好(描述:为简洁起见,我们的代码示例不会处理这些错误,但您肯定应该在生产应用程序中处理这些错误。)@pacification感谢您的评论,修复了您的代码无法编译的问题,因为它是可选的。关于
的注释
很好(描述:为简洁起见,我们的代码示例不会处理这些错误,但您肯定应该在生产应用程序中处理这些错误。)@pacification感谢您的评论,修复了代码