【问题标题】:iOS Memory Heap keeps growingiOS 内存堆不断增长
【发布时间】:2016-02-24 21:45:11
【问题描述】:

我希望这只是一些我无法弄清楚的简单事情。

我有一个带有类扩展的核心数据模型。

+(CDvitalsPO2Data *) newVitalDataInContext:(NSManagedObjectContext *)context {
    NSEntityDescription *entity = [NSEntityDescription entityForName:po2EntityName inManagedObjectContext:context];
    CDvitalsPO2Data *newVitalsDataPoint = [[[CDvitalsPO2Data class] alloc] initWithEntity:entity insertIntoManagedObjectContext:context];    
    return newVitalsDataPoint;
}

所以这会在上下文和 po2 实体名称中返回一个新项目。太好了。

如果我从这段代码中调用这个类扩展:

-(void) logPO2:(NSDictionary *)po2EntryDictionary forThisTime:(NSDate *)loggedTime inContext:(NSManagedObjectContext *)context {

if (context) {
        CDvitalsPO2Data *vitalsPO2Entry;
        vitalsPO2Entry  = [CDvitalsPO2Data newVitalDataInContext:context];
        vitalsPO2Entry.timeStamp  = [NSDate dateWithTimeIntervalSinceReferenceDate:[loggedTime timeIntervalSince1970]];

        vitalsPO2Entry.accelX = [po2EntryDictionary objectForKey:po2LogAccelX];
        vitalsPO2Entry.accelY = [po2EntryDictionary objectForKey:po2LogAccelY];
        vitalsPO2Entry.accelZ = [po2EntryDictionary objectForKey:po2LogAccelZ];
        vitalsPO2Entry.patchID = [po2EntryDictionary objectForKey:po2LogPatchID];
        vitalsPO2Entry.patchRSSI = [po2EntryDictionary objectForKey:po2LogPatchRSSI];
        vitalsPO2Entry.sequenceID = [po2EntryDictionary objectForKey:po2LogSequenceID];
        vitalsPO2Entry.sessionID = [po2EntryDictionary objectForKey:po2LogSessionID];
        vitalsPO2Entry.po2Value = [po2EntryDictionary objectForKey:po2LogValue];

        NSError *error;

        [[vitalsPO2Entry managedObjectContext] save:&error];
        if (error) {
            NSLog(@"save error:%@",error);
        }
}

我将对象插入到上下文中,它被保存了,但堆只是不断增长。如果此日志每秒或每分钟运行一次,我只会看到内存增长。我在调用中加入了各种弱指针,尝试将事物设置为 nil,将自动释放池放置到位;似乎没有什么能放慢速度,更不用说停止记忆蠕动了。我觉得我缺少一些基本的东西。这些对象在上下文保存后超出范围后不应该被转储吗?当我查看 Instruments 时,对象上似乎有一个保留,但它是在系统级别,它不是来自我的例程调用之一。

【问题讨论】:

    标签: ios core-data memory-management heap-memory


    【解决方案1】:

    我看到的所有问题都直接与 Xcode 方案有关。 产品->方案 选择运行选项 UNCHECK -> 队列调试(启用回溯记录)

    完成此操作后,所有内存占用增长立即消失。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2013-01-09
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      相关资源
      最近更新 更多