block简单入门


        // 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);
//        


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值