首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果使用一个自动释放池来控制对某个领域的引用,那么在离开该池之前调用realm.invalidate是很好的做法吗?

如果使用一个自动释放池来控制对某个领域的引用,那么在离开该池之前调用realm.invalidate是很好的做法吗?
EN

Stack Overflow用户
提问于 2016-07-25 02:09:04
回答 1查看 296关注 0票数 1

我有一个应用程序可以对一个领域进行大量后台读取,在此期间,另一个后台线程(即不是主线程)可能正在写入同一个领域,因此我在后台线程上使用一个自动释放池,以确保快速恢复对领域的线程引用。见下文摘录

代码语言:javascript
运行
复制
autoreleasepool {
    do {
        let backgroundRealm = try Realm(configuration: self.configuration)

        .... Do lots of reading

        backgroundRealm.beginWrite() 

        .... Do lots of writing here

        try backgroundRealm.commitWrite()

        // Is this good practice or not?
        backgroundRealm.invalidate()
    }
    catch {
        ....
    }
}

通过阅读文档跨线程使用领域inWriteTransaction,还不清楚在commitWrite()和/或离开自动发布池之前,对backgroundRealm.invalidate()的调用是否有助于降低文件大小并提高性能?当这个领域在幕后被收回时,这是否隐含地发生了?对invalidate()的调用只会浪费CPU周期而不会带来额外的好处吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-25 08:05:11

调用backgroundRealm.invalidate()是否有助于降低文件大小并提高性能?

不是的。invalidate()对文件大小没有影响。如果要将文件大小保持在较小的范围内,则需要使用writeCopyToURL(_:, encryptionKey:_, error: _)编写压缩副本。但是,没有方便的方法用于就地契约,这将需要使所有访问线程无效。

当这个领域在幕后被收回时,这是否隐含地发生了?

就没必要了。当不再有任何访问器来阻止它时,一个领域就会被释放。因此,没有任何东西可以被废除。

调用使()失效只会浪费CPU周期,而不会带来额外的好处吗?

只要您不从您的自动发布池中泄漏访问器,您就应该没事。如果您在运行时泄漏对象来定位这些对象,调用invalidate()可能会有所帮助。但是要小心:当您访问一个无效的对象时,它将失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38558775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档