2010-08-24 22 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

相關問題