iOS-收藏集视图是否将每个单元格都保留在内存中?

时间:2019-02-06 12:46:40

标签: swift uicollectionview out-of-memory

我有一个垂直收集视图,其中包含6种不同类型的单元格...我观察到在滚动时,正在从服务器获取新的帖子,(我正在使用分页机制(我正在获取20个到20)),应用程序崩溃并显示日志Message from debugger: Terminated due to memory issue

我还注意到,当分配的RAM超过1 GB时,就会发生这种情况,这很疯狂,因为在任何给定的时间展示了大约三个帖子……当获取400个以上的帖子时就会发生!

我想,当某个单元格不在视野范围内时,集合视图会对其进行取消分配。那正确吗?因此,如果某个单元格中有一个图像,当我要显示该图像时我会下载/缓存该图像,然后由于滚动而该单元格不再可见,则该图像不应在内存中。对吧?

编辑1:

我在代码中所做的是在willDisplay cell处检查将要显示的单元格是否是最后一个。如果是的话,那么我正在向服务器请求将接下来的20个帖子(如有)带给我。这样做时,我会将新的帖子追加到posts数组。之后,我只是重新加载集合视图。

编辑2:

我正在使用PFImageView中的Parse SDK作为缓存机制

1 个答案:

答案 0 :(得分:1)

否,它们已被重用。

图像可能在缓存中,这可能是导致您占用大量内存的原因。必要时应将其从内存中删除,如果您想从头开始实现,则可以在class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) user_company = models.ForeignKey(Company, on_delete=models.CASCADE) user_role = models.ForeignKey(ACLRoles, on_delete=models.CASCADE) user_dob = models.DateField(null=True, blank=True) user_phone = models.CharField(max_length=30, blank=True, null=True) user_image = models.ImageField(upload_to='user_profiles/', default='default_user.png',blank=True, null=True) user_created = models.DateTimeField(auto_now_add=True) user_is_deleted = models.BooleanField(default=False) user_deleted_at = models.DateTimeField(blank=True, null=True) 上进行搜索。

我建议使用 SDWebImage Kingfisher 有效地下载和缓存图像。

  

集合视图采用视图回收程序来改进   效率。当视图移出屏幕时,它们将从视图中移除,并且   放置在重用队列中,而不是被删除。作为新内容   在屏幕上滚动,将视图从队列中删除并重新调整用途   新内容。

文档: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CollectionViewBasics/CollectionViewBasics.html