在Core Data中插入/检查数据会增加活动监视器中的内存

时间:2016-05-16 16:06:57

标签: objective-c macos core-data automatic-ref-counting

这是一个代码插入并检查一些数据(每分钟100条记录)。结果它增加了Activity Monitor中的内存。

另外问题是,经过几个小时的工作后,cache.sqlite达到了5 Mb,但在活动监视器中,我看到该应用程序需要超过100 Mb且不断增长

使用Xcode 7乐器我没有看到任何内存泄漏。

请帮我解决问题:

@property (nonatomic, strong) NSManagedObjectContext* moc;
...

- (BOOL)addCache:(NSData *)aHash
{
    BOOL isAdded = NO;

    @autoreleasepool {

        DOMCItem* messageCacheItem = (DOMCItem *)[DOMCItem insertInManagedObjectContext:_moc];
        messageCacheItem.contentkey = aHash;

        NSArray *objArr = [[_moc registeredObjects] allObjects];
        [_moc obtainPermanentIDsForObjects:objArr error:nil];

        if([_moc save:nil]) {

            isAdded = YES;
        }

        for (NSManagedObject *mo in [_moc registeredObjects]) {
            [_moc refreshObject:mo mergeChanges:NO];
        }

        [_moc reset];
    }

    return isAdded;
}

- (BOOL)isCached:(NSData *)aHash
{
    BOOL isCached = NO;

    @autoreleasepool {

        NSEntityDescription* ed = [DOMCItem entityInManagedObjectContext:_moc];
        NSFetchRequest* fr = [[NSFetchRequest alloc] init];
        [fr setEntity:ed];
        NSPredicate* pr = [NSPredicate predicateWithFormat:@"key == %@", aHash];
        [fr setPredicate:pr];
        [fr setFetchLimit: 1];

        NSArray* arr = [_moc executeFetchRequest:fr error:nil];

        if ([arr count] > 0) {

            isCached = YES;
        }
    }

    return isCached;
}

0 个答案:

没有答案