Blok Objective-C

Kelas Objective-C mendefinisikan objek yang menggabungkan data dengan perilaku terkait. Terkadang, masuk akal untuk mewakili satu tugas atau unit perilaku, daripada sekumpulan metode.

Blok adalah fitur tingkat bahasa yang ditambahkan ke C, Objective-C, dan C ++ yang memungkinkan Anda membuat segmen kode berbeda yang dapat diteruskan ke metode atau fungsi seolah-olah itu adalah nilai. Blok adalah objek Objective-C yang berarti dapat ditambahkan ke koleksi seperti NSArray atau NSDictionary. Mereka juga memiliki kemampuan untuk menangkap nilai dari lingkup yang melingkupinya, membuatnya mirip dengan closure atau lambda dalam bahasa pemrograman lain

Sintaks deklarasi blok sederhana

returntype (^blockName)(argumentType);

Implementasi blok sederhana

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

Berikut ini contoh sederhananya

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

Kita dapat meminta blok tersebut menggunakan

simpleBlock();

Memblokir Argumen dan Mengembalikan Nilai

Blok juga dapat mengambil argumen dan mengembalikan nilai seperti metode dan fungsi.

Berikut adalah contoh sederhana untuk mengimplementasikan dan memanggil blok dengan argumen dan mengembalikan nilai.

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

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

Blok Menggunakan Definisi Jenis

Berikut adalah contoh sederhana menggunakan typedef di blok. Harap perhatikan contoh inidoesn't work di online compileruntuk sekarang. MenggunakanXCode untuk menjalankan hal yang sama.

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

Mari kita kompilasi dan jalankan, itu akan menghasilkan hasil sebagai berikut -

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.

Blok lebih banyak digunakan di aplikasi iOS dan Mac OS X. Jadi lebih penting untuk memahami penggunaan blok.