0

我有一个应用程序允许用户在 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");
        }
}
4

2 回答 2

1

在模拟器中运行您的应用程序并观察应用程序目录 (~/Library/Application Support/iPhone Simulator/version/Applications/app-install-id/) 以查看正在写入的文件。在尝试修复和磁盘空间泄漏之前,您需要知道哪些文件正在泄漏。

于 2014-08-04T22:21:26.100 回答
1

这应该使用可以在此处下载的最新版本进行修复:http: //static.realm.io/downloads/cocoa/latest

于 2014-08-05T21:39:22.190 回答