我有一个应用程序允许用户在 UITableView 中发布消息以供其他用户查看。我使用 Parse.com 作为我的应用程序的后端。每次加载表时,都会从 parse 中获取表中显示的所有信息。我遇到的问题是,当用户滚动浏览表中的帖子时,应用程序开始从磁盘中吸收内存。该应用程序从大约 9MB 开始,在上下滚动所有帖子几分钟后,可能会超过 500MB。
我无法想象这是怎么发生的,因为我没有将任何数据保存到磁盘。有没有人见过这个,或者知道什么可能会占用这么多的存储空间?或者有没有人有一个好的策略来弄清楚到底存储了什么?
谢谢!
编辑
所以我找到了占用所有内存的代码。当我注释掉对此方法的调用时,我没有遇到问题。
这是代码:
基本上,我正在检查一个内部数据库(使用 Realm.io)来查看当前用户是否喜欢该帖子。对 [Post objectsWithPredicate:pred] 的调用会占用大量内存。为什么会这样做?一旦变量超出范围,内存不会被释放吗?或者这是由于 Realm 中的一些细节超出了我的想象?
- (void)updateButtonColorForCell:(PostTableViewCell *)cell withPost:(PFObject *)post
{
UIColor *themeColor = ((AppDelegate *)[UIApplication sharedApplication].delegate).themeColor;
// Make all user-liked cells theme color with white text
NSString *dappedPosts;
if ([post.parseClassName isEqualToString:@"Message"]) {
likedPosts = @"likedMessages";
} else if ([post.parseClassName isEqualToString:@"Comment"]) {
likedPosts = @"likedComments";
}
NSPredicate *pred = [NSPredicate predicateWithFormat:@"objectId = %@", post.objectId];
RLMArray *matches = [Post objectsWithPredicate:pred];
if ([matches count]) {
if (((Post *)[matches firstObject]).likedByMe) {
cell.button.backgroundColor = themeColor;
[cell.button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
} else {
cell.button.backgroundColor = [UIColor whiteColor];
[cell.button setTitleColor:themeColor forState:UIControlStateNormal];
}
} else {
NSLog(@"Message not found in db");
}
}