问题:使用xcode工具分析iOS应用程序似乎是一个小但非常关键的(片段是在整个项目中间接执行的)内存泄漏。
DESRCIPTION:我们不使用实体引用并遵循典型的Apple建议的核心数据对象上下文堆栈
以下是工具的屏幕截图,显示由于NSAsynchronousFetchRequest
维持对NSFetchResult
根据乐器
,这是触发泄漏的代码片段(删除所有非必要代码,甚至[弱自我]仍然没有改变它)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 {
}
启用编译优化标志也是如此。
问题:是否有可能只是一个Instruments或xcode错误?或者它是一个已知的核心数据问题?或任何有用的提示,以解决我的问题来源将非常感激。
答案 0 :(得分:1)
核心数据对象contexts堆栈似乎是问题。在配置中,我们有一个主上下文,它具有一个具有实际持久性协调器的写上下文。 根据{{3}},问题在于主要背景是父母。
解决这个
[[1;2]; [3]] |> List.collect id // [1; 2; 3]
设置为nil NSAsynchronousFetchRequest
属性
在调用完成块之后(这样参考循环是
破坏和资源可以由ARC解除分配。