【问题标题】:Leak in managedObjectContext save:managedObjectContext 保存泄漏:
【发布时间】:2011-02-15 04:10:45
【问题描述】:

我有以下代码,当我使用 Instruments/Object Allocations 时,它告诉我那里存在泄漏(下降到 sqlite3MemMalloc)。有什么我应该发布的吗?

if (![managedObjectContext save:&error]) {
  NSLog(@"Error while saving.");
}

保存效果很好,不会触发错误。

【问题讨论】:

    标签: iphone sqlite core-data memory-leaks


    【解决方案1】:

    泄漏很可能发生在正在保存的托管对象之一中,它只显示在此处。如果您查看 Instruments 中的堆栈,您可能会看到泄漏的对象。由于它只在保存时显示,它可能在验证代码中。

    【讨论】:

    • 感谢您的回答。 “验证码”是什么意思?另外,根据我的尝试,我似乎托管对象是自动释放的。
    • ManagedObjects 本身由上下文保留/释放,但它们自己创建的任何对象都可能泄漏。例如,如果您有一个自定义方法初始化了一个字符串但没有释放它。
    • 对不起,“验证”应该是“验证”。它是在保存托管对象之前调用的方法,以确保属性/属性在保存之前处于正确状态。默认情况下,方法采用validatePropertyName:error: 的形式。
    【解决方案2】:

    您的NSManagedObject 实例有任何子类吗?

    当您为 NSManagedObject 实例设置值时,您是否会释放对它们的所有权?例如,如果您对以下代码执行以下操作:

    NSString *someString = [[NSString alloc] initWithString:@"Blah"];
    [myManagedObject setValue:someString forKey:@"stringValue"];
    

    你会泄漏内存,因为你仍然拥有那个NSString。这就是上面提到的 TechZen。

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 2020-03-22
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多