Blocos Objective-C
Uma classe Objective-C define um objeto que combina dados com comportamento relacionado. Às vezes, faz sentido representar apenas uma única tarefa ou unidade de comportamento, em vez de uma coleção de métodos.
Blocos são um recurso de nível de linguagem adicionado a C, Objective-C e C ++ que permitem criar segmentos distintos de código que podem ser passados para métodos ou funções como se fossem valores. Blocos são objetos Objective-C, o que significa que podem ser adicionados a coleções como NSArray ou NSDictionary. Eles também têm a capacidade de capturar valores do escopo envolvente, tornando-os semelhantes a fechamentos ou lambdas em outras linguagens de programação
Sintaxe de declaração de bloco simples
returntype (^blockName)(argumentType);
Implementação de bloco simples
returntype (^blockName)(argumentType)= ^{
};
Aqui está um exemplo simples
void (^simpleBlock)(void) = ^{
NSLog(@"This is a block");
};
Podemos invocar o bloco usando
simpleBlock();
Blocos recebem argumentos e valores de retorno
Os blocos também podem receber argumentos e valores de retorno, assim como métodos e funções.
Aqui está um exemplo simples para implementar e invocar um bloco com argumentos e 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);
Blocos usando definições de tipo
Aqui está um exemplo simples usando typedef em bloco. Observe este exemplodoesn't work no online compilerpor enquanto. UsarXCode para executar o mesmo.
#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;
}
Vamos compilá-lo e executá-lo, ele produzirá o seguinte 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.
Blocos são mais usados em aplicativos iOS e Mac OS X. Portanto, é mais importante entender o uso de blocos.