zoukankan      html  css  js  c++  java
  • iOS开发之Block

    iOS开发之Block

    1.什么是block,block的作用

      UI开发和网络常见功能实现回调, 按钮的事件处理方法是回调方法, 网络下载后的回调处理

      (1) 按钮 target-action  一个方法传入按钮中

      (2) 表格视图    传入一个指针self, 回调视图控制器中的方法

      (3) block     语句块, 解决回调, 理解为"匿名函数", 定义在方法里面

    2.block的基本使用(语法)

    涉及知识点:

      定义block变量,定义block语句块

      block参数和返回值

      block捕获外部变量(包括self)

    //block基本使用
    -(void)blockBasicUse
    {
        //block 理解匿名函数
        
        //void func()
        //{
        //}
        
        //1.block变量的定义
        //技巧:   解决语法诡异带来难写的问题
        // void func();
        
        //定义block变量,^表示定义block,
        //技巧: 函数名左右加括号, 在函数名前面在加^
        void (^block)();
        
        //定义block语句块, 存储到了block变量中
        block = ^void ()
        {
            NSLog(@"I am block");
        };
        
        //执行
        block();
        
        //2.带有参数和返回值block
        //实例    实现计算两数之和block
        // int myAdd(int x,int y);
        
        int (^myAdd)(int x,int y) = ^int (int x,int y)
        {
            return x+y;
        };
        
        int s = myAdd(10,20);
        NSLog(@"s = %d",s);
        
        
        //3.block捕获外部外部变量
        //  block使用block外面的变量的注意事项
        //int num = 10;
        __block int val = 100;
        void (^b1)() = ^void()
        {
            //能使用和修改实例变量
            _page = 1;
            //block中不能修改局部变量的值
            //num++;
            
            //block中能修改__block修饰的局部变量
            val++;
            
            //有可能有警告,因为内存问题引起, 注意
            // __weak typeof(self) weakSelf = self; //block外定义
            // weakSelf.url = @"text";
            self.url = @"txt";
        };
        b1();
    
    }

    3.Block在开发中的应用

    1.排序

     //oc中应用
        //1.NSMutableArray排序
        
        Dog *ahua = [[Dog alloc] init];
        ahua.nickname = @"ahua";
        ahua.age = 4;
        
        Dog *amiao = [[Dog alloc] init];
        amiao.nickname = @"amiao";
        amiao.age = 3;
        
        Dog *dahuang = [[Dog alloc] init];
        dahuang.nickname = @"dahuang";
        dahuang.age = 5;
        
        NSMutableArray *marr = [[NSMutableArray alloc] initWithArray:@[ahua,amiao,dahuang]];
        //marr sortUsingSelector:<#(SEL)#>
        [marr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Dog *aDog = obj1;
            Dog *bDog = obj2;
            //年龄排序从小到大  return aDog.age > bDog.age;
        //姓名字母排序 从z到a排序
            return [aDog.nickname compare:bDog.nickname] < 0;
        }];
        
        for (Dog *d in marr) {
            NSLog(@"name = %@ age=%d",d.nickname,d.age);
        }

    2.传值

     //2.UIView动画
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, 100, 100)];
        label.text = @"我是label";
        label.backgroundColor = [UIColor redColor];
        [self.view addSubview:label];
        
        //向下移动200
        //[UIView animateWithDuration:<#(NSTimeInterval)#> animations:<#^(void)animations#>];
        [UIView animateWithDuration:2 animations:^{
            CGRect frame = label.frame;
            frame.origin.x += 280;
            label.frame = frame;
        } completion:^(BOOL finished) {
            NSLog(@"动画结束");
            
            [UIView animateWithDuration:1 animations:^{
                label.transform = CGAffineTransformMakeRotation(M_PI);
            } completion:^(BOOL finished) {
            
            }];
            
        }];
        
        
        //block实现界面反向传值
        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
        button.frame = CGRectMake(100, 200, 100, 30);
        [button setTitle:@"切换" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];











  • 相关阅读:
    2019-2020-1学期20192405《网络空间安全专业导论》第七周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第十二周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第十一周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第十周学习总结
    2019-2020-1学期20192402第九周《网络空间安全专业导论》学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第八周自学总结
    2019-2020-1学期20192402《网络空间安全专业导论》第七周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第七周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第七周学习总结
    2019-2020-1学期20192402《网络空间安全专业导论》第六周自学总结
  • 原文地址:https://www.cnblogs.com/shiningsky/p/4399214.html
Copyright © 2011-2022 走看看