Objective-C类定义了一个将数据与相关行为相结合的对象。 有时,仅表示单个任务或行为单元而不是方法集合是有意义的。
块是C,Objective-C和C++等编程语言中的高级功能,它允许创建不同的代码段,这些代码段可以传递给方法或函数,就像它们是值一样。
块是Objective-C对象,因此它们可以添加到NSArray
或NSDictionary
等集合中。 它们还能够从封闭范围中捕获值,使其类似于其他编程语言中的闭包或lambda
。
简单块声明语法
returntype (^blockName)(argumentType);
简单的块实现 -
returntype (^blockName)(argumentType)= ^{
};
下面是一个简单的示例代码 -
1 void (^simpleBlock)(void) = ^{ 2 NSLog(@"This is a block"); 3 };
调用上面块的示例代码 -
simpleBlock();
块接受参数和返回值
块也可以像方法和函数一样获取参数和返回值。
下面是一个使用参数和返回值实现和调用块的简单示例。
1 double (^multiplyTwoValues)(double, double) = 2 ^(double firstValue, double secondValue) { 3 return firstValue * secondValue; 4 }; 5 6 double result = multiplyTwoValues(2,4); 7 NSLog(@"The result is %f", result);
使用类型定义块
这是一个在块中使用typedef
的简单示例。 请注意,此示例不适用于在线编译器。 它是使用XCode运行的。
1 #import <Foundation/Foundation.h> 2 3 typedef void (^CompletionBlock)(); 4 @interface SampleClass:NSObject 5 - (void)performActionWithCompletion:(CompletionBlock)completionBlock; 6 @end 7 8 @implementation SampleClass 9 10 - (void)performActionWithCompletion:(CompletionBlock)completionBlock { 11 12 NSLog(@"Action Performed"); 13 completionBlock(); 14 } 15 16 @end 17 18 int main() { 19 20 /* 第一个Objective-C程序 */ 21 SampleClass *sampleClass = [[SampleClass alloc]init]; 22 [sampleClass performActionWithCompletion:^{ 23 NSLog(@"Completion is called to intimate action is performed."); 24 }]; 25 26 return 0; 27 }
执行上面示例代码,得到以下结果:
1 2018-11-10 08:14:57.105 demo[184:323] Action Performed 2 2018-11-10 08:14:57.108 demo[184:323] Completion is called to intimate action is performed.
块在iOS应用程序和Mac OS X中使用得更多。因此,了解块的用法更为重要。