2012-09-21 9 views
5

Los bloques Obj-C son algo que acabo de utilizar por primera vez recientemente. Estoy tratando de comprender la siguiente sintaxis del bloque:Objective-C Block Sintaxis

En el archivo de cabecera:

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

En el archivo principal:

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

aprecio la ayuda!

+0

IMO, parece más claro lo que sucede si utiliza la sintaxis de puntos. 'if (self.completionBLock) self.completionBlock (rootObject, nil);' – zpasternack

Respuesta

2

Su bloque de una propiedad, puede establecer un bloqueo en tiempo de ejecución.

Ésta es la sintaxis para establecer

Como es de tipo vacío, por lo que dentro de la clase se puede establecer un método mediante el siguiente código

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

Con siguiente código se puede llamar al método set/bloque previamente.

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

¡Muchas gracias! – JaredH

5

Blocks are Objects.

En su caso dentro del método se está comprobando si el bloque no es nulo y entonces están llamando pasar los dos argumentos necesarios ...

Tenga en cuenta que los bloques se llaman de la misma manera la función de corriente alterna es ...

continuación he dividir la declaración en dos para que pueda entender mejor:

[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

¡Gracias por la explicación! – JaredH