我有一个应用程序,允许用户在UITableView中发布消息,供其他用户查看。我正在使用Parse.com作为我的应用程序的后端。每次加载表时,都会从解析中获取表中显示的所有信息。我遇到的问题是,当用户滚动浏览表中的帖子时,应用程序开始从磁盘中吸收内存。应用程序从大约9MB开始,在所有帖子上下滚动几分钟后,可能会爆炸超过500 9MB。
我无法想象这是如何发生的,因为我没有将任何数据保存到磁盘。以前有人见过这个吗,或者知道是什么东西吸走了这么多仓库?或者,是否有人有一个很好的策略来准确地弄清楚存储的是什么?
谢谢!
编辑
所以我已经找到了吸收所有记忆的代码。当我注释掉对这个方法的调用时,我不会遇到这个问题。
以下是代码:
基本上,我正在检查一个内部数据库(使用Realm.io),以查看当前用户是否喜欢该帖子。调用Post objectsWithPredicate:pred占用大量内存。为什么要这么做?一旦变量超出作用域,内存就不会被释放吗?或者这是由于领域的一些细节已经超出了我的头?
- (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");
}
}发布于 2014-08-05 21:39:22
这应该通过最新的版本来修复,您可以在这里下载:http://static.realm.io/downloads/cocoa/latest
发布于 2014-08-04 22:21:26
在模拟器中运行您的应用程序,并查看应用程序目录(~/Library/Application /iPhone Simulator/version/Applications/app-install-id/) ),查看正在写入哪些文件。在您尝试修复和磁盘空间泄漏之前,您需要知道哪些文件被泄露到了哪些文件中。
https://stackoverflow.com/questions/25128449
复制相似问题