【问题标题】:Core Data Malloc Errors核心数据 Malloc 错误
【发布时间】:2010-12-19 03:57:25
【问题描述】:

我注意到我的应用中随机出现一些错误。我有 2 个错误,“双重释放”和“释放对象的校验和不正确”。这是“双重释放”错误的堆栈跟踪。任何人都可以提供任何见解吗?它发生在我的代码中的一个调用中,它只是将一个属性设置为NSNumber,所以我不明白它为什么会这样做!

myObject.numberAttr = [NSNumber numberWithInt:[dateComponents day]];

随机触发(并不总是发生):

#0  0x9585b072 in malloc_error_break
#1  0x9585c218 in szone_error
#2  0x9585c34d in free_tiny_botch
#3  0x01c5e064 in _PFDeallocateObject
#4  0x01c97e2b in -[NSManagedObject(_NSInternalMethods) _setLastSnapshot__:]
#5  0x01c97a0d in -[NSManagedObjectContext(_NSInternalChangeProcessing) _establishEventSnapshotsForObject:]
#6  0x01c97866 in _PFFastMOCObjectWillChange
#7  0x01c976c5 in _PF_ManagedObject_WillChangeValueForKeyIndex
#8  0x01c97525 in _sharedIMPL_setvfk_core
#9  0x01c9b827 in _svfk_5

非常感谢,

迈克尔

【问题讨论】:

    标签: iphone memory-management core-data malloc


    【解决方案1】:

    我想通了!事实证明,这是我的托管对象上下文的线程问题。我在主线程上创建它并在我的后台线程上使用它。但是,似乎必须在 1 个线程内创建和使用上下文。希望这可以帮助其他可能遇到此问题的人,因为调试信息不​​是很清楚!

    【讨论】:

    • +1 作为答案,因为它帮助我解决了我的问题。在我的例子中,主上下文创建的 NSManagedObject 被用于背景上下文,这显然是错误的。
    【解决方案2】:

    “numberAttr”就像一个声明为retain的属性,所以当你改变它的值来引用一个不同的NSNumber对象时,之前的NSNumber对象会被发送一个释放消息。如果先前的对象已经被释放,我希望看到这种行为。

    您还有其他要设置“numberAttr”的地方吗?在您更改此处的属性之前,这些 NSNumber 对象之一是否可能已被释放?

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 2011-10-30
      • 2014-07-05
      • 2012-03-28
      • 2012-02-16
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多