2012-09-21 16 views
5

Bloki Obj-C to coś, czego używam po raz pierwszy ostatnio. Próbuję zrozumieć bloku następującą składnię:Składnia bloku Objective-C

W pliku nagłówka:

@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err); 

W głównym pliku:

-(void)something{ 

id rootObject = nil; 

// do something so rootObject is hopefully not nil 

    if([self completionBlock]) 
     [self completionBlock](rootObject, nil); // What is this syntax referred to as? 
} 

Doceniam pomoc!

+0

IMO, wydaje się bardziej jasne, co się dzieje, jeśli używasz składni punktowej. 'if (self.completionBLock) self.completionBlock (rootObject, nil);' – zpasternack

Odpowiedz

2

Jego własność blok, można ustawić blok przy starcie.

Oto składnia ustawić

Jak to jest nieważne typ, więc w klasie można ustawić metodę następujący kod

self.completionBlock = ^(id aID, NSError *err){ 
    //do something here using id aID and NSError err 
}; 

Z następujący kod można wywołać metodę/zestaw blok poprzednio.

if([self completionBlock])//only a check to see if you have set it or not 
{ 
     [self completionBlock](aID, nil);//calling 
} 
+0

Dziękuję bardzo! – JaredH

5

Bloki są obiektami.

W twoim przypadku wewnątrz metody jest sprawdzana, gdy blok nie jest zerowa, a potem dzwonisz to mijając dwa wymagane argumenty ...

Należy pamiętać, że bloki są nazywane w ten sam sposób funkcja AC jest ...

Poniżej mam podzielić na dwie części, aby oświadczenie pozwalają lepiej zrozumieć:

[self completionBlock] //The property getter is called to retrieve the block object 
    (rootObject, nil); //The two required arguments are passed to the block object calling it 
+0

Dziękuję za wyjaśnienie! – JaredH

Powiązane problemy