Iphone 核心数据存储器管理

Iphone 核心数据存储器管理,iphone,memory-management,core-data,Iphone,Memory Management,Core Data,我只是想确保我在核心数据的内存管理方面做得正确 在我的视图控制器(即选项卡栏视图)viewDidLoad中,我使用NSFetchRequest检索我需要的行。然后我保留返回的NSArray对象,因为我需要等待用户交互来显示这部分数据。在viewDidUnload中,我释放该数组 我担心的是,当数据变得更多时,这种机制是否会效率低下?无论如何,我只使用了其中的一部分,但需要获取所有数据,以防用户通过所有数据 您的问题的答案完全取决于您的模型是如何构造的,以及您要获取多少对象。未受影响的对象非常小,

我只是想确保我在核心数据的内存管理方面做得正确

在我的视图控制器(即选项卡栏视图)
viewDidLoad
中,我使用
NSFetchRequest
检索我需要的行。然后我保留返回的NSArray对象,因为我需要等待用户交互来显示这部分数据。在
viewDidUnload
中,我释放该数组


我担心的是,当数据变得更多时,这种机制是否会效率低下?无论如何,我只使用了其中的一部分,但需要获取所有数据,以防用户通过所有数据

您的问题的答案完全取决于您的模型是如何构造的,以及您要获取多少对象。未受影响的对象非常小,尽管没有对象更好。如果你想变得聪明,你可以限制你的抓取大小,并根据需要在范围内引入对象。这就是NSFetchedResultsController所做的


话虽如此,我不明白为什么你需要获取一组潜在的大量数据,并将其保存在选项卡栏视图中,最多可以同时显示六个按钮,如果你有一个定制页面,在用户难以滚动之前,可以实际放入多少选项卡?如果超过24个,您可能会出现UI问题,甚至在像iPhone这样的内存不足的设备上。

这个解决方案很好,不过您可能需要查看
NSFetchedResultsController
,因为它会为您带来很多负担


否则你会很好,记忆会为你处理。当您进行提取时,您将获取骨架对象(读取少量内存,直到单独访问为止),如果它们在一段时间内未被使用,则可以将它们转换回骨架。这意味着核心数据将为您完成大部分内存管理。只要你坚持你的阵型,你就是黄金。

啊,很抱歉误导了你。我没有将这些数据填充到选项卡栏,而是一个选项卡栏控制器视图,实际上是滚动视图。滚动视图中的每一页代表一条记录。用户可以滚动到几个项目或整个数据库。这仍然不能给我任何范围的你所说的。如果整个数据库有大约100条记录,则无所谓,如果是大约1000000条,则无所谓。如果这真的很重要,那么我建议您为您的获取请求选择一个合理的批处理大小,并在每次获取的固定数量的对象中设置错误。如果用户滚动超过您拥有的对象,那么您将使用新的限制进行获取。签出
fetchOffset
fetchLimit
。以及NSFetchRquest的
fetchBatchSize
属性。