- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
问题:使用 xcode 工具分析一个 iOS 应用程序时,它似乎是一个很小但很重要的内存泄漏(片段在整个项目中间接执行)。
描述:我们不使用任何实体引用并遵循典型的苹果建议的核心数据对象上下文堆栈
这是仪器的屏幕截图,显示由于 NSAsynchronousFetchRequest
维护对 NSFetchResult
的相互间接引用而导致的明显泄漏
根据 Instruments
,这是触发泄漏的代码片段(删除了所有不必要的代码,即使 [weak self] 仍然没有改变它)let anEntityFetch = NSFetchRequest<NSFetchRequestResult>(entityName: AnEntity.entityName)
let asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: rangeQuantityFetch) { (asynchronousFetchResult) -> Void in
//
}
do {
// commenting out the execute there is no leak anymore
_ = try managedObjectContext.execute(asyncFetchRequest)
} catch {
}
启用编译优化标志也会发生同样的事情。
问题:是否有可能只是仪器或 xcode 错误?或者这是一个已知的核心数据问题?或者任何有用的提示来解决问题的根源,我将不胜感激。
最佳答案
这似乎是核心数据对象上下文堆栈的问题。在配置中,我们有一个主上下文,它有一个写上下文作为父上下文,它有实际的持久性协调器。根据memory-leak-on-nspredicate-that-used-in-fetch-request-to-fetch-nsmanagedobject问题在于主上下文有父级。
要解决这个
NSAsynchronousFetchRequest
以将 request
属性设置为 nil在完成 block 被调用之后(这样引用周期是坏了,资源可以由 ARC 重新分配)。关于swift - NSAsynchronousFetchRequest 可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44517850/
我正在创建一个 NSAsynchronousFetchRequest,其中有一个完成 block 。 我见过各种示例,其中一些包括在主线程上使用调度队列,而另一些则没有。例如,Ray Wenderli
问题:使用 xcode 工具分析一个 iOS 应用程序时,它似乎是一个很小但很重要的内存泄漏(片段在整个项目中间接执行)。 描述:我们不使用任何实体引用并遵循典型的苹果建议的核心数据对象上下文堆栈 这
似乎有两种方法可以在不阻塞主线程 UI 的情况下在 CoreData 中执行异步读取。 newBackgroundContext + NSFetchRequest 来源:https://www.adv
我是一名优秀的程序员,十分优秀!