数据上的valueForKey NSManagedObject不释放内存

时间:2012-09-24 01:10:21

标签: iphone objective-c ios core-data memory-management

我想处理商店中每个originalImage实体中名为Media的数据属性。

问题在于,尽管自动释放,每次通过valueForKey访问内存时都会建立内存,最终应用程序崩溃。或许它正在加载大量单独的NSData项目,这是问题所在,但是仪器显示它是一个稳定的内存使用情况图,直到它最终给我一个内存警告然后崩溃。

我还没有开始使用其余的代码,所以我没有执行一些我没有向你展示的隐藏任务。

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Media"
                                                      inManagedObjectContext:[self managedObjectContext]];
    [request setEntity:entity];
    [request setFetchBatchSize:10];
    NSArray *mediaItems = [[self managedObjectContext] executeFetchRequest:request error:nil];


    for (NSManagedObject *media in mediaItems) {

        @autoreleasepool {

            [media valueForKey:@"originalImage"];

        }

    }

编辑:今天似乎即使只是提到NSManagedObject媒体也足以导致这种媒体泄露。所以即使没有valueForKey线,我也有泄漏。我试过这个:

    while (i < count) {
        @autoreleasepool {
        NSManagedObject *media = [mediaItems objectAtIndex:i];

            [[self managedObjectContext] refreshObject:media mergeChanges:NO];

        NSLog(@"i: %i", i);
        i++;
        }
    }

这也行不通,并在同一时间坠毁。

1 个答案:

答案 0 :(得分:3)

您尝试过类似的事情吗?

for(int i=0;i<[mediaItems count]; i++) {
    @autoreleasepool {
        NSManagedObject *media = [mediaItems objectAtIndex:i];
        [media valueForKey:@"originalImage"];
    }
}

也许这种方式“媒体”会在每个循环中正确发布。

(对不起,我把它放在评论上。我是SO的新手而且没有足够的代表。)

相关问题