2017-06-13 94 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被釋放)。