2016-04-14 21 views
0

İki yöntem çağrısı A ve B'nin olduğu bir oyuncak sorunum var. Her ikisi de API çağrısı yapıyor ve her ikisi de başarılı geri arama bloklarına sahip. Metot A, kontrolördeki bir özelliği doldurur ve B metodunu okur ve B metodu api talebi bittikten sonra başarı bloğunda bununla ilgili bazı hesaplamalar yapar. B'denGenel bir özelliği paylaşan iki async görevi

@property (nonatomic) NSArray *test; 

[self methodA]; 
[self methodB]; 

geri arama A'ya geri dönüşünde önce gerçekleşebilir ve B boş özelliğini okuyarak sona ereceğini: Şimdi sadece bunlar gibi her iki yürütmek olamaz. Cıvatalar çerçevesine bakıyordum ve buradaki herhangi birinin bunu elde etmek için nasıl kullanılacağına dair bazı işaretler verebileceğini merak ediyordum? Esasen sadece api aramalarının eşzamansız olmasını ve daha sonra B'nin A bitirene kadar beklemesini istiyorum.

cevap

0

Böyle bir görev için harici bir çerçeve kullanmanıza gerek yok, sadece bir semaphore kullanın. GCD semaforları sağlar, bkz. dispatch_semaphore_create and friends.

dispatch_semaphore_t sema; 
@property (nonatomic) NSArray *test; 

sema = dispatch_semaphore_create(0); 
[self methodA]; 
[self methodB]; 

- (void) methodA 
{ 
    ... 
    // set test 
    dispatch_semaphore_signal(sema); 
    ... 
} 

- (void) methodB 
{ 
    ... 
    // prepare to read test 
    dispatch_semaphore_wait(sema); 
    // read test 
    ... 
} 

HTH

: gibi bir şey olacak sözde kod bu referanstan ilk örneği uyarlanması

,

İlgili konular