本文主要是介绍进击的KFC:OC(六)Block,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
pragma mark ——– Block语法
一.Block的定义:
Block:块语法,本质上是匿名函数(没有名称的函数).Block语法和函数指针很相似。
课程回顾:函数
函数:C语⾔中,实现某⼀功能的代码段。
完整的函数包含两部分:函数声明、函数定义
函数声明,即函数原型。例如:int sum(int x,int y);具有两个整型参
数,⼀个整型返回值的函数。
函数定义,即函数实现。例如:int sum(int x,int y){retrun x + y;}
课程回顾:函数指针:
函数指针(变量):存放函数地址(函数名)的指针变量。
int (*p)(int x,int y) = sum;
函数指针类型:int (*)(int x,int y) 即:指向 两个整型参数,⼀个整
型返回值 函数 的指针。
函数指针变量:p
函数指针的值:sum
Blcok语法;
Block详细:
1.Block 标志:^
2.Block保存的是:有特定功能的函数体
3.数据类型 + 变量名 = 初值;
4.初值部分 是一个没有名字的 函数体 并且类型与Block类型相同
5.匿名函数就是函数 其函数中定义的变量,存在栈区
pragma mark ——– Block的使用
实例:
// 写⼀个 返回值为整型 参数为NSString(仅⼀个参数)的block,实现将字符串转换为整型的功能NSInteger (^blockReturnInt)(NSString *str) = ^NSInteger (NSString *str){ NSInteger result = [str intValue];return result;}; NSLog(@"%ld",blockReturnInt(@"KFC"));
Block进⾏typedef
typedef NSInteger (^MyBlock)(NSString *str)
原类型:NSInteger (^)(NSString *str)
新类型:MyBlock
以后创建新的Block可以这样写: MyBlock block2 = ^NSInteger(NSString *str){NSInteger result = [str intvalue];return result;
};
Block与局部变量:
Block与全局变量:
pragma mark ——– Block与数组排序
block的好处:1.当把Block当作参数 传入方法中2.非常灵活 可以灵活掌控Block的实现3.也就是 你传入的Block实现的是声明功能,你这个方法 就实现什么功能Block;用处之一就是排序.实例:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"7",@"4",@"6", nil];// 系统方法实现:[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2){// 交换位置// 实现部分,填写obj1 和 obj2 的关系// 实现原理: 数组中两个元素进行比较// 比较后 返回值 如果前面比后面大 则交换// 经此比较到最后一个元素 完成排序
// compare:可以比较的类型:1.字符串类型(NSString *) 2.NSNmuber *类型NSString *str1 = (NSString *)obj1; // 类型转换,看数组中存放的是什么类型,就把obj转换对应的对象类型NSString *str2 = (NSString *)obj2; {return NSOrderedDescending;}else if([str1 compare:str2] < 0){return NSOrderedAscending;}elsereturn NSOrderedSame;}];NSLog(@"%@",array);// 自定义Block方法的实现:
NSComparisonResult (^MyCompare)(id obj1,id obj2) = ^NSComparisonResult(id obj,id obj2){// 先确定类型NSNumber *num1 = (NSNumber *)obj1;NSNumber *num2 = (NSNumber *)obj2;if([num1 compare:num2] > 0){return NSOrderedDescending; }else if([num1 compare:num2] < 0){return NSOrderedAscending;}elsereturn NSOrderedSame;
};// 需要什么类型 咱就给什么类型 就行[array sortUsingComparator:MyCompare];NSLog(@"%@",array);
pragma mark ——– 字面量
// 切记:字面量使用的初始化方法 是类方法初始化
NSArray *array = [NSArray arrayWithObiects:@“1”,@“2”,nil];
相当于:
NSArray *arrayNew = @[@“1”,@“2”];
//取出一个元素
[arrayNew objectAtIndex:0]; 相当于: arrayNew[0];
总结:
block是苹果最推崇的语法,iOS4.0之后的类都添加了block⽀
持。block通常当参数来使⽤。
字⾯量是⼀种新型的写法,能在⼀定程度上简化代码。
字⾯量创建的对象是便利构造的,且是不可变的。
这篇关于进击的KFC:OC(六)Block的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!