Objective-C-Blöcke

Eine Objective-C-Klasse definiert ein Objekt, das Daten mit verwandtem Verhalten kombiniert. Manchmal ist es sinnvoll, nur eine einzelne Aufgabe oder Verhaltenseinheit darzustellen und nicht eine Sammlung von Methoden.

Blöcke sind eine Funktion auf Sprachebene, die zu C, Objective-C und C ++ hinzugefügt wurde. Mit dieser Funktion können Sie unterschiedliche Codesegmente erstellen, die an Methoden oder Funktionen weitergegeben werden können, als wären sie Werte. Blöcke sind Objective-C-Objekte, dh sie können Sammlungen wie NSArray oder NSDictionary hinzugefügt werden. Sie können auch Werte aus dem umschließenden Bereich erfassen, wodurch sie Closures oder Lambdas in anderen Programmiersprachen ähneln

Einfache Blockdeklarationssyntax

returntype (^blockName)(argumentType);

Einfache Blockimplementierung

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

Hier ist ein einfaches Beispiel

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

Wir können den Block mit aufrufen

simpleBlock();

Blöcke nehmen Argumente an und geben Werte zurück

Blöcke können ebenso wie Methoden und Funktionen Argumente annehmen und Werte zurückgeben.

Hier ist ein einfaches Beispiel zum Implementieren und Aufrufen eines Blocks mit Argumenten und Rückgabewerten.

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

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

Blöcke mit Typdefinitionen

Hier ist ein einfaches Beispiel für die Verwendung von typedef im Block. Bitte beachten Sie dieses Beispieldoesn't work auf der online compilerzur Zeit. VerwendenXCode das gleiche laufen lassen.

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

Lassen Sie uns es kompilieren und ausführen, es wird das folgende Ergebnis erzeugen -

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.

Blöcke werden häufiger in iOS-Anwendungen und Mac OS X verwendet. Daher ist es wichtiger, die Verwendung von Blöcken zu verstehen.