Iphone malloc错误-[CFString release]

Iphone malloc错误-[CFString release],iphone,Iphone,由于某种原因,我的应用程序在某个特定操作上崩溃。经过调查,我发现是因为发布了一些已经发布的东西。然后我在互联网上读到,我可以使用NSZombie和MallocStackLogging追踪这一问题的原因,我实现了这一点,并得到了结果 NSZombie:2011-01-19 14:39:09.523 iota[13649:207]*-[CFString 释放]:消息已发送到解除分配 实例0xeeaf510 马洛古历史 ALLOC 0xeeaf510-0xeeaf52f[尺寸=32]: 螺纹a0041

由于某种原因,我的应用程序在某个特定操作上崩溃。经过调查,我发现是因为发布了一些已经发布的东西。然后我在互联网上读到,我可以使用NSZombie和MallocStackLogging追踪这一问题的原因,我实现了这一点,并得到了结果

NSZombie:2011-01-19 14:39:09.523 iota[13649:207]*-[CFString 释放]:消息已发送到解除分配 实例0xeeaf510

马洛古历史

ALLOC 0xeeaf510-0xeeaf52f[尺寸=32]: 螺纹a0041500 |开始|主| UIApplicationMain | GSEventRun| GSEventRunModal | CFRunLoopRunInMode| CFRunLoopRunSpecific |CFRunLoopRun |\uuu\CFRunLoopDoTimer| __CFRUNLOOP正在调用计时器回调函数 |_uu\NSFireDelayedPerform| -[UITableView _UserSelectRowatineXpath:][124;-[UITableView _SelectRowatineXpath:动画:滚动位置:notifyDelegate:] |-[CorpDirViewController tableView:DidSelectRowatineXpath:]| -[CorpDirPersonViewController corpDirViewController:选择联系人后应继续] |-[联系人项目合并联系人:]| -[ContactItem getValueForProperty:]| ABRecordCopyValue| CPRecordCopyProperty| CPRecordGetProperty| ABC多值负载| ABCDBContextFetchMultiValuePropertyIntoRecord |ABCDBContextFetch多值条目| CPSqliteStatementSendResults| 收集多值项| _sqliteStatementApplyValuesFromRecordWithNullValue |CFStringCreateWithCString| __CFStringCreateImmutableFunnel3 | | CFRuntimeCreateInstance | malloc|u zone|u malloc


现在我无法找出造成这次事故的具体原因。有人能帮我吗?

验证您对该字符串的分配/释放。alloc+retain的数量必须等于发布的数量。
不要释放自动释放对象。

如您所知,您正在对已销毁的对象调用
release
。也就是说,您对对象调用了一次过多的
release
(在本例中是NSString)。通过NSZombieEnabled执行的异常现在告诉您“一次过多”发布的完成位置。但大多数时候你都在寻找中间的版本,而这很难做到


既然您知道它在哪里崩溃(因此应该知道涉及哪个变量),那么您需要通读代码,了解在哪里释放这个变量,或者对象如何分配给那个变量,然后检查这些源。也就是说,您需要“回溯”对象的来源以及您对其所做的操作。在它生命的某个阶段,你要么忘记了保留它,或者您意外地
释放了
/
自动释放了
将其放在了不应该放的地方。

请将问题格式化为可读状态:-)如果您以前保留了自动释放的对象,则必须释放它。我注意到此问题是在头文件中分配的NSString中发生的。改成非原子后,一切都很好!但我们从未显式释放NSString对象。-[CFString release]在这里是什么意思?
CFString
是NSString的底层类。您确实释放了一个NSString,异常证明了这一点;-)现在你需要找出在哪里。。。