我正在使用Xcode 4.2编写和Clang 3.0来构建一个演示特定崩溃的程序.
该程序有一个窗口,它意味着保持在笔尖中设置为"关闭时释放",因此它在后续使用中被过度释放.它意味着是一张纸,所以它显示使用beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:.尝试第二次或第三次显示窗口会导致应用程序崩溃.
我记得一年前发生的事情,程序接收EXC_BAD_ACCESS并触发调试器在此时停止.我还记得能够使用Zombies模板在Instruments中查找问题.
这就是我想要的(这个程序是演示调试技术的演示文稿的一部分),但这不是现在发生的事情.现在,程序没有崩溃; 仪器显示窗口上的保留计数下降到1两次,但没有更低,因此它不会被解除分配.
如果问题在那里停止,那就没问题; 我可以简单地隐藏并再次显示表单.问题是,我第二次提出(应该是死的但仍然至少有一个保留 - 它还活着)表,它是麻木的.
我的意思是,无论是工作表还是其中的任何控件(它包含字段,文本视图和两个按钮)都不响应事件.心跳没有任何作用; 窗口有一个OK按钮,但是当窗口麻木时,OK按钮不会发出脉冲.没有什么可以解雇这张纸.
但该计划并没有崩溃.我仍然可以与菜单交互,Dock显示程序正在响应.如果我尝试退出它,它会发出哔哔声,因为它有一张纸.
是什么导致窗户变得麻木,我该怎么办呢?
这是该程序的简化版本,也出现了问题:https://github.com/boredzo/NumbWindow
我认为你不应该用它-close来让床单消失。如果将[sheet close];行更改为[sheet orderOut:self];,则它可以正常工作。
至于为什么不同,我不知道。但我的经验是总是用来-orderOut:消除工作表,而从不使用-close. 该文档支持我这一点:
清单 3 Did-end 选择器
- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
[sheet orderOut:self];
}
Run Code Online (Sandbox Code Playgroud)
长话短说:
您使用了错误的方法来使面板消失。
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |