• OC中 block 的用法


       block 常用于反向传值

       声明

     返回值类型 (^block)(参数列表)

       调用

    闭包的名字=^(参数列表){};

      闭包的名字();

    如:

    void(^aaaaa)(int num,NSString *Sring);

        aaaaa=^(int num,NSString *string){

            NSLog(@"%d,%@",num,string);

        };

        

        

         aaaaa(120,@“www");

    block实现反向传值

    (1)用属性实现:

    1.在.h文件声明:@property(nonatomic,copy)void(^block)(NSString * Nametexts);

    2.在.m文件声明block的值:-(void)back:(UIButton *)sender{

        self.block (sender.titleLabel.text);

        [self dismissViewControllerAnimated:YES completion:nil];

    }

    3.在另一个ViewController.m中导入第一步的.h文件,之后:-(void)gonext{

        nextViewController *next = [[nextViewController alloc]init];

        next.block =^(NSString * Nametexts){

            label.text =Nametexts;

        };

        

        [self presentViewController:next animated:YES completion:nil];

    (2)用方法实现:1.在ViewController1.h 声明方

    法:-(void)tou:(void(^)(NSString *message))block;

    2.在ViewController1.m 调用这个方法:-(void)tou:(void(^)(NSString *message))block{

        block(@"大黄牛");

    }

    3.在ViewController.m中导入ViewController1.h  之后在- (void)viewDidLoad 输入:ViewController1 *v1 = [[ViewController1 alloc]init];

        

        

        [v1 tou:^(NSString *message) {

            NSLog(@"%@",message);

        }];

    注意:1.修改Block外部变量的时候 需添加__block 修饰。

    如:__block UIImage *image = nil;

      imageNameBlock =^(NSString *imageName){

           image = [UIImage imageNamed:imageName];

           self.view.backgroundColor = [UIColor colorWithPatternImage:image];

      };

       imageNameBlock (@"头像.jpg");

    2.声明的 block为 全局变量时

      block会被循环引用 因此要用 __weak 弱引用

     例: __weak ViewController *vis = self;

        __block UIImage *image = nil;

            imageNameBlock =^(NSString *imageName){

                image = [UIImage imageNamed:imageName];

               vis.view.backgroundColor = [UIColor colorWithPatternImage:image];

  • 相关阅读:
    SPOJ 10628 求树上的某条路径上第k小的点
    zoj 2112 动态区间求第k大
    SPOJ QTREE 树链剖分
    FZU 2082 过路费
    bzoj 1036 Tree Count
    POJ 3237
    C
    G
    E
    B. Split a Number(字符串加法)
  • 原文地址:https://www.cnblogs.com/popper123/p/4737812.html
Copyright © 2020-2023  润新知