【问题标题】:Memory allocated when accessing CoreData to-many relationship not released?访问CoreData时分配的内存未释放?
【发布时间】:2012-08-24 08:50:13
【问题描述】:

我正在构建一个新闻应用程序,其中有一系列代表实际文章的图像。当您点击其中一个时,它会打开主文章页面,该页面底部有一个包含相关文章的滚动视图。

我发现了一个关于底部滚动条的奇怪问题(可能与 CoreData 相关)。当我打开文章页面时,我会获取相关文章,分配一系列articleViewControllers 并将它们的视图添加到滚动视图中。当我从文章页面切换时,我从滚动条中删除所有视图并释放articleViewControllers。在使用 Instruments 和几个 heapshots(一个在点击文章之前,另一个在切换回主页时)时,我发现仍然分配了大量内存(见图)

查看非对象选项卡时,我发现大部分分配发生在以下代码行,在上述articleViewControllerviewDidLoad 方法中:

    NSSet *tempSet = [[NSSet alloc] initWithSet:tempArticle.thumb];
    //tempArticle.thumb is the actual problem here
    [tempSet release]

tempArticleArticle 类的一个实例,它是 NSManagedObject 的子类。 如果我注释掉这两行代码,一切正常,所以我猜这是 CoreData 使用错误的结果。

感谢任何帮助。谢谢!

【问题讨论】:

    标签: ios core-data memory-management one-to-many nsmanagedobject


    【解决方案1】:

    Core Data 处理自己的内存管理。它可以将对象保存在内存中或随心所欲地清除它们。

    建议您不要在 NSManagedObjects 中存储大型 BLOB(例如图像)。相反,将图像存储到磁盘,其文件路径引用在 NSManagedObject 中。

    【讨论】:

    • 或者使用新的允许外部存储复选框。
    • 嘿,这太酷了!值得注意的是,遗憾的是它只在 iOS 5+ 中可用,所以我暂时不会利用它 =(
    • 您好,感谢您的回复,但这不是这里的问题。我已经在使用外部存储来保存图像并将路径保存在 NSString 属性中。
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2015-03-08
    相关资源
    最近更新 更多