Objective-C Blokları
Objective-C sınıfı, verileri ilgili davranışla birleştiren bir nesneyi tanımlar. Bazen, bir yöntemler koleksiyonundan ziyade tek bir görevi veya davranış birimini temsil etmek mantıklıdır.
Bloklar, C, Objective-C ve C ++ 'ya eklenen, yöntemlere veya işlevlere sanki değerlermiş gibi aktarılabilen farklı kod segmentleri oluşturmanıza olanak tanıyan dil düzeyinde bir özelliktir. Bloklar, Objective-C nesneleridir; bu, NSArray veya NSDictionary gibi koleksiyonlara eklenebilecekleri anlamına gelir. Ayrıca, diğer programlama dillerindeki kapanışlara veya lambdalara benzer hale getirerek, çevreleyen kapsamdaki değerleri yakalama yeteneğine sahiptirler.
Basit Blok bildirimi sözdizimi
returntype (^blockName)(argumentType);
Basit blok uygulaması
returntype (^blockName)(argumentType)= ^{
};
İşte basit bir örnek
void (^simpleBlock)(void) = ^{
NSLog(@"This is a block");
};
Kullanarak bloğu çağırabiliriz
simpleBlock();
Bloklar Argümanları ve Dönüş Değerlerini Alır
Bloklar da tıpkı yöntemler ve işlevler gibi argümanlar alabilir ve değerleri döndürebilir.
Burada argümanlar ve dönüş değerleri olan bir bloğu uygulamak ve çağırmak için basit bir örnek verilmiştir.
double (^multiplyTwoValues)(double, double) =
^(double firstValue, double secondValue) {
return firstValue * secondValue;
};
double result = multiplyTwoValues(2,4);
NSLog(@"The result is %f", result);
Tip Tanımlarını Kullanan Bloklar
İşte typedef'i blokta kullanan basit bir örnek. Lütfen bu örneğe dikkat edindoesn't work üzerinde online compilerşimdilik. KullanımXCode aynısını çalıştırmak için.
#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;
}
Derleyelim ve çalıştıralım, aşağıdaki sonucu verecektir -
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.
Bloklar daha çok iOS uygulamalarında ve Mac OS X'te kullanılmaktadır. Bu yüzden blokların kullanımını anlamak daha önemlidir.