Blocchi Objective-C

Una classe Objective-C definisce un oggetto che combina i dati con il comportamento correlato. A volte, ha senso solo rappresentare un singolo compito o unità di comportamento, piuttosto che una raccolta di metodi.

I blocchi sono una funzionalità a livello di linguaggio aggiunta a C, Objective-C e C ++ che consentono di creare segmenti di codice distinti che possono essere passati a metodi o funzioni come se fossero valori. I blocchi sono oggetti Objective-C, il che significa che possono essere aggiunti a raccolte come NSArray o NSDictionary. Hanno anche la capacità di acquisire valori dall'ambito di inclusione, rendendoli simili a chiusure o lambda in altri linguaggi di programmazione

Sintassi della dichiarazione di blocco semplice

returntype (^blockName)(argumentType);

Semplice implementazione del blocco

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

Qui c'è un semplice esempio

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

Possiamo invocare il blocco usando

simpleBlock();

I blocchi accettano argomenti e restituiscono valori

I blocchi possono anche accettare argomenti e restituire valori proprio come metodi e funzioni.

Ecco un semplice esempio per implementare e richiamare un blocco con argomenti e valori di ritorno.

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

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

Blocchi che utilizzano definizioni di tipo

Ecco un semplice esempio che utilizza typedef in block. Si prega di notare questo esempiodoesn't work sul online compilerper adesso. UsoXCode per eseguire lo stesso.

#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;
}

Compiliamolo ed eseguiamolo, produrrà il seguente risultato:

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.

I blocchi vengono utilizzati maggiormente nelle applicazioni iOS e in Mac OS X. Quindi è più importante comprendere l'utilizzo dei blocchi.