OC (六)
来源:互联网 发布:淘宝上怎么买ig包 编辑:程序博客网 时间:2024/06/02 20:51
Block语法 Block使用 掌握Block方式实现数组排序Block 匿名函数:没有名称的函数。OC第六讲Block详细:block 类型: int(^)(int)block 变量:myBlockBlock值: ^ int (int num){return 7*num;}即:^ 返回值类型(参数列表){ 函数体} 其中 返回值类型可以省略。Block 可以写在main函数内部。int strToInt(NSString *str); int strToInt(NSString *str){ return [str intValue]; } //为block的原有类型做新类型定义 //int(^)(NSString *)----->BlockType typedef int (^BlockType) (NSString *); // c语言的冒泡排序函数。对OC的数组对象做排序 typedef BOOL (^CompareBlock)(NSString *,NSString *); void bubbleSortArray(NSMutableArray *array, CompareBlock compare); void bubbleSortArray(NSMutableArray *array,CompareBlock compare) { NSInteger count = [array count];//获取数组的元素个数 for (NSInteger i = 0; i < count -1; i ++) { for (NSInteger j = 0; j < count - 1 -i; j++) { id object1 = [array objectAtIndex:j]; id object2 = [array objectAtIndex:j+1]; if (compare(object1,object2)) { [array exchangeObjectAtIndex:j withObjectAtIndex:j+1]; } } } } int count = 0;//全局变量 //写⼀一个 返回值为整型 参数为OC字符串(仅⼀一个参 数)的block,实现将字符串转换为整型的功能 //因为匿名函数本身没有函数名,通过定义block变量相当于为匿名函数起了个函数名,以后再调用函数的时候就可以使用block变量名加实参的形式,与函数指针变量调用函数的格式一致。 1.block符合 局部变量的定义方式, 2.block是对匿名函数起的别名,所以又符合函数的特征。 3.在使用block变量时,使用方式与函数指针变量调用函数的方式一致。BlockType stringBlock= ^(NSString *str){ return [str intValue]; }; int result = stringBlock(@"123456"); NSLog(@"reslut = %d",result); int (*StringPointer)(NSString *)= strToInt; int result1 =StringPointer(@"123456"); NSLog(@"result1 =%d",result1); NSMutableArray *array = [NSMutableArray arrayWithObjects:@"21",@"23",@"33",@"32",@"12", nil]; NSLog(@"array = %@",array); //__block 修饰符可以允许block匿名函数内部访问其他函数定义的局部变量,例如index 变量是在main函数中定义的。 __block int index = 0; CompareBlock compare = ^(NSString *str1,NSString *str2){ count++; index ++; int number1 = [str1 intValue]; int number2 = [str2 intValue]; if (number1 > number2) { return YES; } return NO; }; bubbleSortArray(array,compare); NSLog(@"array = %@",array); NSLog(@"count = %d",count); NSArray *array = [NSArray arrayWithObjects:@"12",@"122",@"44",@"1",@"77",@"14",@"4",@"9", nil]; //使用不可变数组的block排序方法 NSComparator compareBlock = ^(id str1, id str2){ //return [str2 compare:str1];//降序 int number1 = [str1 intValue]; int number2 = [str2 intValue]; if (number1 < number2) { return NSOrderedAscending;//升序 } return NSOrderedDescending;//降序 }; NSArray *sortArray = [array sortedArrayUsingComparator:compareBlock]; NSLog(@"%@",sortArray); NSMutableArray *mutaleArray = [NSMutableArray arrayWithArray:array]; //[mutaleArray sortUsingComparator:compareBlock]; [mutaleArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { int number1 = [obj1 intValue]; int number2 = [obj2 intValue]; if (number1 < number2) { return NSOrderedAscending; } return NSOrderedDescending; }]; NSLog(@"%@",mutaleArray);
0 0
- OC (六)
- OC语言(六)
- OC语言注意事项六
- OC基础(六)
- 六---oc三大特性
- OC学习笔记六---OC特有语法二
- 【OC语法快览】六、类实现
- 六、oc中构造方法的学习
- IOS—OC学习六—block
- OC学习笔记六 内存管理(autorelease)
- 进击的KFC:OC(六)Block
- OC阅读笔记六:NSCopying协议
- OC -基础(六) 学习中。。。
- oc学习笔记(六)面向对象-开发技巧
- 黑马程序员-OC笔记(六)ARC Block protocol
- iOS开发之OC语法基础(六)--可见度
- OC语言学习 (六) 继承、多态,构造方法,description方法
- OC学习里面的一些概念(六)
- 序列化
- l链式栈
- Solr 多核(MultiCore)配置
- POJ 1003 Hangover
- 3D Slicer编译 vs2008
- OC (六)
- UVa 11795 - Mega Man's Mission(集合DP 状态压缩)
- tyvj begin 闰秒 wa了2个小时竟然 【水题】
- 对于架构师的一点理解(来自网友讨论)
- 单向链表(五) 按值查找节点,返回一个链表
- 中水处理设备:一体化日常中水回用设备工艺说明
- poj3469 Dual Core CPU --- 最小割
- 线性栈
- B. Sort the Array