目标: 1.通过类中的方法进行排序
2block-函数指针,
3.通过block实现数组的排序
1.自定义类在数组中的排序:
(1)在自定义类中声明实现一个方法,方法的返回值是bool类型,意思是是否进行元素的交换
(2)在main中调用这个方法
(3)在数组中,@selecter 是方法选择器,在指定的对象中,寻找指定的方法。
返回值是布尔类型,判断是否交换,必须有且只有一个参数。
参数的类型是自身类型,参数的代表的是它在数组中的下一个元素。
// [arr1 sortedArrayUsingSelector:@selector(compare:)];
2.block:
(1)匿名函数:
(2)标c没有block,是后续的版本扩展才有的。
(3) block的一个特定就是灵活性。block允许在函数中写一个代码段,类似声明一个函数。
block块,很多的语言里面都有,oc也加上了,在个别领域使用较多,block的用法和函数指针相似,
回顾函数指针:具有特定功能的代码块,返回值,函数名,参数列表,匿名函数,只有返回值和参数列表,
函数指针的返回值是int ,函数指针的名字是p,(*)是标志着p是一个函数指针,函数指针的参数列表是(int,int);
3.block的语法
block的声明:int (^b)(int,int) = ^ int (int a int b){ return 1;};
void (^b1)(int int) = ^ void (int a,int b){ [email protected](@"jfdhjf ");};
int (^b2)() = ^int () { return 13;};
4.block与作用域。 4.block的调用
block中允许写一代码段,类似声明一个函数,在使用中有可能设计变量的作用域,(全局,局部)。
(1).block中是可以随意修改全局变量的,没有任何影响,但是不安全。
(2)默认的局部变量在block中受保护,不能修改,若要修改,需在局部变量类型修饰符前添加‘__block’。两个下划线。
6.对block 别名定义:typedef int (^MYBLOCK)(int ,int );
7.数组排序和block。
(1)系统自带的。
(2)自定义的排序:
// NSMutableArray *[email protected][@"123",@"234",@"244",@"108",@"118"].mutableCopy;
// [a1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// if ([obj1 intValue] >[obj2 intValue]) {
// return YES;
// }
// else return NO;
// }];
8.字面量
(1)字典的字面量--NSMutableDictionary [email protected]{@"key1":@"value1",@"key2":@"value2"};
(2)数组的字面量--NSArray [email protected][@"zhangsan",@"lisi",@"wangwu",@"zhaolu"];
(3)字符串的字面量---[email protected]"this is a sting";
(4)NSNumber的字面量-- NSNumber *num=[NSNumber alloc]initwithInt:12 ] >>>>[email protected](12)
(5)一个符号多个意义,
9.[]的作用:
1)是数字的字面量,
2)数组的访问语法糖,
3)是字典的访问语法糖
4)对象调用方法的标志。