2013-08-07 26 views
1

在Objective-C塊中可以異步或同步運行,具體取決於目的。只要看一下API方法就不會告訴我們會發生什麼。是否有任何約定指示塊與當前線程同步執行?

如果有一個約定表明塊是否將被分派到另一個線程或與當前線程同步運行,那將是很好的。

有沒有?

更新:其他語言可能會使用註釋。我正在思考一些在va_args方法中使用的NS_REQUIRES_NIL_TERMINATION行。

+0

假設你指的是GCD,你應該知道dispatch_sync'和'dispatch_async' –

+1

我談論如之間的區別'[databaseQueue inDatabase:^(FMDatabase *數據庫){}] VS [素材資源庫enumerateUsingBlock] 。 。 。後者是異步的,而前者不是。而且他們可能會也可能不會使用GCD,這在目前無關緊要,因爲它是API消費者。 。 。好像這裏沒有任何約定,一個會有所幫助。 –

+0

然後與塊無關,這都是關於API如何設計的。 –

回答

1

NO。沒有標準的方式來定義塊如何執行。你必須閱讀文檔(如果有的話)或源代碼(如果有的話)才能找到。

但是,您已經控制了您傳入的塊,因此您可以使其始終在主線程或異步執行。

例如

[queue performBlock:^ { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // you know code here must be on main thread 
    }); 
}];