我注意到我的应用中的随机点出现了一些错误。我有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
非常感谢,
迈克尔
答案 0 :(得分:4)
我明白了!事实证明,这是我的托管对象上下文的线程问题。我是在主线程上创建它并在我的后台线程上使用它。但是,似乎必须在1个线程内创建和使用所有上下文。希望这可以帮助其他任何可能遇到此问题的人,因为调试信息不是很清楚!
答案 1 :(得分:1)
“numberAttr”的工作方式类似于声明为retain的属性,因此当您更改其值以引用不同的NSNumber对象时,将向前一个NSNumber对象发送一条释放消息。如果先前的对象已经被释放,我希望看到这种行为。
你有其他地方设置“numberAttr”吗?在此处更改属性之前,是否有可能释放了其中一个NSNumber对象?