// int array[10] 类型是int[10] 函数名是array
// 变量命名规则:1.只能由数字、字母、下划线组成,并且数字不能开头
// 2.不可以与系统保留字同名
// 3.不能使用重复的变量名
// int (*point)(int x, int y); {返回类型 函数名(函数指针,变量名) 参数}
// 闭包 (^:脱字符)
// Block:板块语,本质上是匿名函数(没有名称的函数)
//一,Block语法 堆区(存指针) 栈区 存在于栈区,系统自己管理
//等号左边是函数声明:
//1,返回类型
//2,block的标志^
//3,block的名字(很重要,将来要调用block的时候就是用这个名字)
//4,参数列表
//等号右边是函数定义(函数实现部分)
//1,block的标志^
//2,返回值类型
//3,参数列表
//
// int(^myBlock)(int x, int y) = ^int (int x, int y){
// return x + y; //实现两个数的和
// };
// int result = myBlock(1,2);
// NSLog(@"%d",result);
//
// void(^pringtBlock)(void) = ^void(void){
// NSLog(@"hello150516");
// };
// pringtBlock();
//
// void(^printBlock)(NSString *string) = ^void (NSString *string){
// int num = [string intValue];
// NSLog(@"%d",num);
// };
// printBlock(@"15");
//二,block的一些注意问题
//
//1,block 里面局部变量的使用
//block使用局部变量的时候是一个局部copy过程,copy过来之后拷贝为一个常量(如果block里面引用了main外面局部变量,block会把main外面局部变量copy一份)
//如果block体内部需要修改局部变量,这时候局部变量需要用__block修饰
__block int number = 10;
void(^myBlock)(int x) = ^void(int x){
number ++;
NSLog(@"%d",number);
};
myBlock(number);
//2,block中使用全局变量
void(^myBlock1)(void) = ^void(void){
num ++;
NSLog(@"%d",num);
};
//调用 block
// num++; //101
myBlock1();
//3,block的实现部分,返回值最好加上
NSInteger(^block)(NSInteger x,NSInteger y) = ^NSInteger(NSInteger x,NSInteger y){
//return (NSInteger)1; //强转为integer类型
return x+y;
};
NSInteger aaa = block(2,3);
NSLog(@"%ld",aaa);
利用block排序
// NSArray *array = @[@"name3",@"name1",@"name2"];
//
排序---对于不可变的数组,排序需要接受返回值
// array = [array sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"%@",array);
//
// NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"name3",@"name1",@"name2", nil];
// ---对于可变的数组,排序不需要接受返回值
// [mutableArray sortUsingSelector:@selector(compare:)];
// NSLog(@"%@",mutableArray);
//
//
// Person *person1 = [[Person alloc]initWithName:@"huoming" withSex:@"m" withAge:35];
// Person *person2 = [[Person alloc]initWithName:@"yiqiang" withSex:@"f" withAge:32];
// Person *person3 = [[Person alloc]initWithName:@"liufeng" withSex:@"m" withAge:21];
// NSArray *personArray = @[person1,person2,person3];
// //personArray = [personArray sortedArrayUsingSelector:@selector(compare:)];
// //只能给字符串跟number排序 不能对对象person排序
// //NSLog(@"%@",personArray);
// // 下面使用block排序(但是排序的时候需要制定按照什么排序)
// personArray = [personArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// //(下面不是强制转化,只是相当于obj1是person类型)
// Person *personObj1 = (Person *)obj1; //(NSString *)name;
// Person *personObj2 = (Person *)obj2;
// //按照姓名排序
// if ([[personObj1 getName] compare:[personObj2 getName]] > 0) {
// return NSOrderedDescending; //+1下降
// }else if ([[personObj1 getName] compare:[personObj2 getName]] < 0){
// return NSOrderedAscending; //-1上升
// }else{
// return NSOrderedSame;
// }
//
当用(@property NSString *name;)方法时把setter方法屏蔽掉时,需要用person.name调出name值
if ([personObj1.name compare:personObj2.name] > 0) {
return NSOrderedDescending; //+1下降
}else if ([personObj1.name compare:personObj2.name] < 0){
return NSOrderedAscending; //-1上升
}else{
return NSOrderedSame;
}
//
//
// }];
// NSLog(@"%@",personArray);
// for (Person *p in personArray) {
// NSLog(@"%@",p);
// }
//
// NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:person1,person2,person3, nil];
// [mutableArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// Person *personObj1 = (Person *)obj1;
// Person *personObj2 = (Person *)obj2;
// //按照姓名排序
// if ([[personObj1 getName] compare:[personObj2 getName]] > 0) {
// return NSOrderedDescending; //+1下降
// }else if ([[personObj1 getName] compare:[personObj2 getName]] < 0){
// return NSOrderedAscending; //-1上升
// }else{
// return NSOrderedSame;
// }
// }];
// NSLog(@"%@",personArray);
//