我有一个应用程序,允许用户在UITableView中发布消息供其他用户查看。我正在使用Parse.com作为我的应用程序的后端。每次加载表时,都会从解析中获取表中显示的所有信息。我遇到的问题是,当用户滚动表中的帖子时,应用程序开始从磁盘中提取内存。应用程序从大约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");
}
}
答案 0 :(得分:1)
在模拟器中运行您的应用程序并观察应用程序目录(〜/ Library / Application Support / iPhone Simulator / version / Applications / app-install-id /)以查看正在写入的文件。在尝试修复和磁盘空间泄漏之前,您需要知道哪些文件正在泄漏。
答案 1 :(得分:1)
这应该使用最新版本修复,您可以在此处下载:http://static.realm.io/downloads/cocoa/latest