码迷,mamicode.com
首页 > 其他好文 > 详细

OC中 block 的用法

时间:2015-08-17 23:08:20      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

 

   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];

 

OC中 block 的用法

标签:

原文地址:http://www.cnblogs.com/popper123/p/4737812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!