Objective-C類定義一個(gè)對象,結(jié)合相關(guān)的行為的數(shù)據(jù)。有時(shí),它是有道理的,只是代表一個(gè)任務(wù)或單位的行為,而不是一個(gè)集合的方法。
塊是一個(gè)語言級功能補(bǔ)充到 C,Objective-C 和 C++,讓你可以創(chuàng)建不同的代碼段可以被傳遞到方法或函數(shù)就好像它們是值。塊是Objective-C 對象,這意味著它們可以被添加到像NSArray 或NSDictionary中的集合。他們也有能力來捕獲值從封閉范圍,使他們關(guān)閉或其他編程語言中的lambda表達(dá)式類似
returntype (^blockName)(argumentType);
簡單的塊的實(shí)現(xiàn)
returntype (^blockName)(argumentType)= ^{ };
void (^simpleBlock)(void) = ^{ NSLog(@"This is a block"); };
simpleBlock();
塊也就像方法和函數(shù)的參數(shù)和返回值。
下面是一個(gè)簡單的例子,實(shí)現(xiàn)和調(diào)用的參數(shù)和返回值的塊。
double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) { return firstValue * secondValue; }; double result = multiplyTwoValues(2,4); NSLog(@"The result is %f", result);
下面是一個(gè)簡單的例子,用typedef 在塊中。
#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; }
讓我們編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:
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.
塊用于多個(gè)應(yīng)用程序在iOS和Mac OS X,因此,它更重要的是了解使用塊。