的情況並不少見,看看iOS開發建議沿着線: 在objective-c中命名塊?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// work in background
NSLog(@"%s work", __PRETTY_FUNCTION__);
dispatch_async(dispatch_get_main_queue(), ^{
// update UI on main queue
NSLog(@"%s updateUI", __PRETTY_FUNCTION__);
});
});
這是偉大的,但出問題的時候可能會很難調試。縱觀輸出:
AppName[1051:4013] __47-[Classname methodName]_block_invoke_0 work
AppName[1051:907] __block_global_0 updateUI
第一個日誌行具有的類和方法的名稱,以便我們跟蹤外塊的問題(希望我們沒有在這個方法定義了很多塊)的一些希望,但第二個日誌行(從內部塊)?祝你好運,特別是如果你已經在你的應用中使用過這種模式。
有沒有辦法給塊名稱,這將有助於我們在控制檯輸出和崩潰日誌中識別它們的源位置?
或者,您可以在塊中設置一個斷點,並且調試器在到達時會向您發送一個堆棧跟蹤(在大多數情況下,IME比'NSLog'更有幫助)。 – 2013-01-01 02:37:41
我也使用斷點,並且從未感受到塊的劣勢。 – danh
我不認爲在命名模塊中有內置命令,但是你肯定可以命名隊列,這可以讓你成爲隊列的一部分。這顯示在調試器中,您可以將其包含在NSLog語句中。或者,您也可以使用'__FILE__'和'__LINE__'。也許定義你自己的宏是上述的組合。 – Rob