6

Kuyrukta beklediğim işlev hiçbir parametre almaz. paramContext olarak neyi geçebilirim? NULL uygulamasında "geçersiz ifadenin geçersiz kullanımı" derleme hatası oluşturulur. Sadece derlemeyi yapmak için işlevime bir parametre eklemek istemiyorum - bu işi nasıl yapabilirim?dispatch_async_f nasıl kullanılır?

Mac OS X SnowLeopard, Objective-C

cevap

2

Sen sarmak gerekir

Bir void* parametreyi almak için işlevini değiştirmek ya gerek Bir şekilde işlev. En kolay yol,

dispatch_async(queue, ^{ myFunc() }); 
dispatch_async(queue, ^{ myFunc() }); 
'da olduğu gibi dispatch_async()'u kullanmaktır.
11

ile Xcode 3.2.6 sadece bağlam argüman için 0/NULL geçmesi mümkün olmakla birlikte, dispatch_async_f() fonksiyon parametre olarak void (*)(void*) alır, bunu bir işlev geçemez hiçbir argüman almaz. Eğer, sar olamazsa,

void func(void*) {} 

... ya:

void orig(void) {} 
void wrapper(void*) { orig(); } 

// ... 
dispatch_async_f(queue, 0, &wrapper);