2010-08-24 21 views
0

我有一段给定的代码,在此之后,我自己的任何代码行都不应执行(不在相同的“事件循环”中)。Xcode调试器:在给定的代码行之后,在我的代码中的任意位置

如何配置Xcode调试器来捕获实际上我自己的某些代码在给定的代码行后执行的实例?

如果无法通过“事件循环”进行过滤,我可以将其过滤为“之后2秒内”吗?

+1

似乎与此有关:http://stackoverflow.com/questions/35538​​86/nsworkspace-openfile-randomly-brings-focus-back-to-my-app我建议坚持原来的问题,因为它有更多有用的信息可以帮助我们解决问题。 – 2010-08-24 14:07:57

回答

1

如果你想真的让人费解,可能依赖于知道自动释放池在事件循环结束时耗尽,并创建一个覆盖-retain和-release的类,并且当保留计数(我会推荐一个ivar)命中零,设置一个标志,再次将保留计数提高到1,并以某种方式将它置于下一个自动释放池中,以便为新事件循环创建。在每一个方法的开始,你要确保只发生在某行代码之前,检查该标志是否在类重写--retain/release中引发,如果不是,则打破/抛出错误/ log/etc。 (宏可能会缩短代码,并且可以有条件地将其定义为调试版本。)然后,紧接在要确保没有任何代码出现的行之后,重置该标志。这样,在这行之后输入的任何代码都会看到未设置的标志并记录/失败/告诉你有关它的信息,并且在每个事件循环之后该标志都将被重置。

其他一些事情:你应该定义+ retain/+ release,并用+ [NSAutoreleasePool addObject:]将类对象添加到autorelease池中,或者将其设置为单例对象,因为该标志必须可访问而不是真的想要传递这个对象。其次,我似乎忽略了如何在下一个循环中将类/单例插入到autorelease池中,在这个循环被耗尽之后。这是因为它是最难的部分,我没有真正的想法,但我有感觉[self performSelector:@selector(autorelease) afterDelay:0]会工作。

+0

唉,我正在使用垃圾收集。我假设在这种情况下检查autorelease池是行不通的,对吧?无论如何,约书亚对这个问题与其他问题的关系是正确的。查看更多上下文的其他问题。 – Enchilada 2010-08-24 16:12:02

相关问题