2012-09-21 13 views
5

Obj-C Blöcke sind etwas, das ich gerade erst zum ersten Mal benutze. Ich versuche, die folgende Block-Syntax zu verstehen:Objective-C Block Syntax

In der Header-Datei:

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

In der Hauptdatei:

-(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? 
} 

Ich schätze die Unterstützung!

+0

IMO, es scheint klarer, was passiert, wenn Sie Punkt-Syntax verwenden. 'if (self.completionBLock) self.completionBlock (rootObject, nil);' – zpasternack

Antwort

2

Es ist eine Blockeigenschaft, einen Block zur Laufzeit einstellen.

Hier ist die Syntax

gesetzt als nichtig Typ ist, so in der Klasse, die Sie

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

Mit folgenden Code ein Verfahren, mit folgenden Code festlegen können Sie die Methode/Blocksatz aufrufen vorher.

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

Vielen Dank! – JaredH

5

Blöcke sind Objekte.

In Ihrem Fall innerhalb der Methode, die Sie überprüft werden, wenn der Block nicht gleich Null ist und dann

Denken Sie daran ... Sie nennen es die beiden erforderlichen Argumente zu übergeben, dass die Blöcke in der gleichen Art und Weise genannt werden ac Funktion ist ...

Below ich die Aussage in zwei Teile gespalten haben, lassen Sie besser verstehen:

[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

Vielen Dank für die Erklärung! – JaredH

Verwandte Themen