我有一个垂直收集视图,其中包含6种不同类型的单元格...我观察到在滚动时,正在从服务器获取新的帖子,(我正在使用分页机制(我正在获取20个到20)),应用程序崩溃并显示日志Message from debugger: Terminated due to memory issue
我还注意到,当分配的RAM超过1 GB时,就会发生这种情况,这很疯狂,因为在任何给定的时间展示了大约三个帖子……当获取400个以上的帖子时就会发生!
我想,当某个单元格不在视野范围内时,集合视图会对其进行取消分配。那正确吗?因此,如果某个单元格中有一个图像,当我要显示该图像时我会下载/缓存该图像,然后由于滚动而该单元格不再可见,则该图像不应在内存中。对吧?
编辑1:
我在代码中所做的是在willDisplay cell
处检查将要显示的单元格是否是最后一个。如果是的话,那么我正在向服务器请求将接下来的20个帖子(如有)带给我。这样做时,我会将新的帖子追加到posts数组。之后,我只是重新加载集合视图。
编辑2:
我正在使用PFImageView
中的Parse SDK
作为缓存机制
答案 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 有效地下载和缓存图像。
集合视图采用视图回收程序来改进 效率。当视图移出屏幕时,它们将从视图中移除,并且 放置在重用队列中,而不是被删除。作为新内容 在屏幕上滚动,将视图从队列中删除并重新调整用途 新内容。