我的iphone应用随机收到此消息。我知道它确实是内存释放问题。但是,找到哪个对象导致此问题的最佳方法是什么。这是我试过的
使用仪器泄漏和 ObjectAllocation Trace。没有看到任何 帮助知道哪个对象有这个 问题
把NSZombieEnabled = YES和项目主管...没有看到任何
将NSLog放在任何地方,但EXE_BAD_ACCESS只出现在任何地方。 在debuger中,只看到了代码 发生在集会中。喜欢 objc-msg发送。
多次查看代码并阅读内存管理很多时间 和在线研究很多时间。但 毫不奇怪。
是否有完整的解决方案可以轻松解决此问题。我是以前的Visual C ++程序员,多年来处理内存管理,很容易在Visual C ++中调试和弄清楚。
答案 0 :(得分:2)
如果您看不到任何有用的调试信息,我建议您找到您正在执行release
的所有地方。很可能是你发布了一些不需要发布的东西。代码可以帮助我们跟踪您的问题。
答案 1 :(得分:0)
除了Erich回答,我还想加回去。从最近添加的版本开始,然后从那里开始工作。
我跑到这里然后发现我发布了一个自动发布的对象,它是返回从内置的便利方法到Cocoa-Touch框架。我的问题就像Erich所描述的那样 - 我发布了这个自动发布的对象。当系统试图释放它时,程序会给出您正在描述的错误。
的问候,
弗兰克
答案 2 :(得分:0)
知道发生了什么的最好方法是使用xCode Debugger,试一试。
答案 3 :(得分:0)
正如Juan所说,第一站是调试器 - 当应用程序崩溃时,调试窗口为堆栈跟踪提供了什么?你应该能够看到它崩溃的线......你在评论中说,你看到崩溃发生在线上:
CGPDFDocumnetRef docA=CGPDFDocumentCreatWithURL(myurl);
CGPDFDocumnetRef docB=CGPDFDocumentCreatWithURL(myurl);
您是否真的为两个呼叫使用相同的URL对象?它到底是哪一行?
它可能是您使用CGPDFDocumentRef的方式,您可以找到Apple在QuartzDemo项目中使用它们的示例代码,文件“QuartzImageDrawing.m”(您可以从开发人员门户或嵌入式中找到演示项目)在使用XCode的iPhone文档中。
XCode实际上非常强大,但它的功能与其他IDE不同。
答案 4 :(得分:0)
如果没有将足够的参数传递给变量参数方法,也会收到消息。例如,有一个像这样的NSLog语句:NSLog(@“Hello%@”);
答案 5 :(得分:0)
检查错误可能是什么
使用NSZombieEnabled。
在您的应用程序中激活NSZombieEnabled工具:
选择项目>编辑Active Executable以打开可执行信息窗口。 单击“参数”。 单击“要在环境中设置的变量”部分中的添加(+)按钮。 在“名称”列中输入NSZombieEnabled,在“值”列中输入“是”。 确保选中NSZombieEnabled条目的复选标记。
在iPhoneSDK上发现了这个