Objective-C中的Block(块)分析
发布时间:2021-12-11 12:47:55 所属栏目:教程 来源:互联网
导读:Block初探 在Objective-c中NSArray是很常用的容器之一,很多时候我们需要对数组中的数据进行排序,因此与下面类似的代码会经常碰到: NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { if ([obj1 integerValue] [obj2 integ
Block初探 在Objective-c中NSArray是很常用的容器之一,很多时候我们需要对数组中的数据进行排序,因此与下面类似的代码会经常碰到: NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { if ([obj1 integerValue] > [obj2 integerValue]) { return (NSComparisonResult)NSOrderedDescending; } if ([obj1 integerValue] < [obj2 integerValue]) { return (NSComparisonResult)NSOrderedAscending; } return (NSComparisonResult)NSOrderedSame; }]; 刚接触objc的朋友可能会对这段代码表示看不懂, sortedArrayUsingComparator: ^(id obj1, id obj2) { // 代码省略 }]; 这个以^开头的参数类型为NSComparetor,原型如下 : typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 其实这个Comparetor的功能就类似于C语言中的函数指针,以及C++11、Java 8 、C#等语言中的Lambda表达式。其返回值的类型为NSComparionResult,参数为两个id类型的变量,类型名为NSComparetor。 C语言中的函数指针 我们首先来回顾一下C语言中的最简单的函数指针,在C语言中我们以 returntype (*name) (arg); 的格式定义一个函数指针变量。或者以 typedef的形式定义一个函数指针类型。示例代码如下 : // C语言的函数指针声明 int (*addInC)(int , int ) ; // 声明一个函数指针类型,类型名为AddOperation typedef int (*AddOperation)(int, int); // 普通C语言函数 int doAdd(int a, int b) { return a + b ; } // int main(int argc, const char * argv[]) { @autoreleasepool { // addInC指针变量指向doAdd函数 addInC = doAdd; // 函数指针调用,实际上调用的是doAdd(5,6) NSLog(@" addInC : %i.", addInC(5, 6)) ; // 声明一个aop函数指针变量,也指向doAdd AddOperation aop = doAdd ; NSLog(@" AddOperation : %i.", aop(100, 23) ); } return 0; } 输出 : addInC : 11. AddOperation : 123. 首先是生命一个函数指针,addInC,然后在main函数中将addInC指向doAdd函数,这样调用addInC(5, 6)就等于调用了doAdd(5, 6)。同理AddOperation也是这个原理。Java 8中的Lambda表达式 ![]() (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |