Bloques Objective-C

Una clase Objective-C define un objeto que combina datos con comportamientos relacionados. A veces, tiene sentido representar una sola tarea o unidad de comportamiento, en lugar de una colección de métodos.

Los bloques son una característica de nivel de lenguaje agregada a C, Objective-C y C ++ que le permiten crear segmentos distintos de código que se pueden pasar a métodos o funciones como si fueran valores. Los bloques son objetos Objective-C, lo que significa que se pueden agregar a colecciones como NSArray o NSDictionary. También tienen la capacidad de capturar valores del alcance adjunto, haciéndolos similares a los cierres o lambdas en otros lenguajes de programación.

Sintaxis de declaración de bloque simple

returntype (^blockName)(argumentType);

Implementación de bloque simple

returntype (^blockName)(argumentType)= ^{
};

He aquí un ejemplo sencillo

void (^simpleBlock)(void) = ^{
   NSLog(@"This is a block");
};

Podemos invocar el bloque usando

simpleBlock();

Los bloques toman argumentos y devuelven valores

Los bloques también pueden tomar argumentos y devolver valores como métodos y funciones.

Aquí hay un ejemplo simple para implementar e invocar un bloque con argumentos y valores de retorno.

double (^multiplyTwoValues)(double, double) = 
   ^(double firstValue, double secondValue) {
      return firstValue * secondValue;
   };

double result = multiplyTwoValues(2,4); 
NSLog(@"The result is %f", result);

Bloques que utilizan definiciones de tipo

Aquí hay un ejemplo simple usando typedef en block. Tenga en cuenta esta muestradoesn't work sobre el online compilerpor ahora. UtilizarXCode para ejecutar lo mismo.

#import <Foundation/Foundation.h>

typedef void (^CompletionBlock)();
@interface SampleClass:NSObject
- (void)performActionWithCompletion:(CompletionBlock)completionBlock;
@end

@implementation SampleClass

- (void)performActionWithCompletion:(CompletionBlock)completionBlock {

   NSLog(@"Action Performed");
   completionBlock();
}

@end

int main() {
   
   /* my first program in Objective-C */
   SampleClass *sampleClass = [[SampleClass alloc]init];
   [sampleClass performActionWithCompletion:^{
      NSLog(@"Completion is called to intimate action is performed.");
   }];

   return 0;
}

Compilemos y ejecutemos, producirá el siguiente resultado:

2013-09-10 08:13:57.155 demo[284:303] Action Performed
2013-09-10 08:13:57.157 demo[284:303] Completion is called to intimate action is performed.

Los bloques se utilizan más en aplicaciones iOS y Mac OS X. Por lo tanto, es más importante comprender el uso de bloques.