2017-06-13 57 views
1

问题:使用xcode仪器分析iOS应用程序时,它看起来很小但很关键(代码段通过项目间接执行)内存泄漏。NSAsynchronousFetchRequest可能的内存泄漏

DESRCIPTION:我们不作任何使用的实体引用,并按照典型的苹果建议的核心数据对象上下文堆栈

这是由于NSAsynchronousFetchRequest仪器显示明显的泄漏保持相互间接截图参照NSFetchResult

enter image description here

这里是代码片段触发泄漏(removeing所有非neccessary码,即使是[弱自]仍然不陈根据仪器

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 { 
} 

同样的事情GE吧)偏偏让编译优化标志。

问题:有没有一种可能,它只是一个工具或者Xcode的错误吗?或者这是一个已知的核心数据问题?或者任何有用的提示来解决我的问题来源将非常感激。

回答

0

它似乎是一个问题与核心数据对象上下文堆栈。在配置中,我们有一个主要的上下文,它拥有一个具有实际持久性协调器的写入上下文。 根据memory-leak-on-nspredicate-that-used-in-fetch-request-to-fetch-nsmanagedobject问题是与主巡航能力方面父。

为了解决这要么

  • 变化核心数据堆栈中的答案指出
  • 或(似乎 工作,但是不干净的溶液)延伸的NSAsynchronousFetchRequest到设置为nil的完成块被称为request属性 后(这种方式的基准周期是 破碎和资源可以由ARC被释放)。