核心数据Malloc错误

时间:2009-11-22 03:58:34

标签: iphone memory-management core-data malloc

我注意到我的应用中的随机点出现了一些错误。我有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

非常感谢,

迈克尔

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

“numberAttr”的工作方式类似于声明为retain的属性,因此当您更改其值以引用不同的NSNumber对象时,将向前一个NSNumber对象发送一条释放消息。如果先前的对象已经被释放,我希望看到这种行为。

你有其他地方设置“numberAttr”吗?在此处更改属性之前,是否有可能释放了其中一个NSNumber对象?