美文网首页
iOS block的简单使用

iOS block的简单使用

作者: Me小酥酥 | 来源:发表于2016-07-21 17:05 被阅读40次
    2016-07-21 16_31_43.gif

    本人用block比较少,可以说是几乎没怎么用过,但是最近发现block也挺好用的,所以决定重温一下关于block 的知识,也在实际开发中用到了,今天总结一下block的简单使用。


    A界面跳转到B界面,把B界面的输入值传给A界面显示出来。

    B界面

    第一种方式

    B界面.h文件

    #import <UIKit/UIKit.h>
    typedef void (^MyBlock)(NSString *title);
    @interface BViewController : UIViewController
    @property (copy, nonatomic) MyBlock myblock;
    @end
    

    B界面.m文件

    - (void)quedingBtn:(id)sender 
    {
        self.myblock(self.testTextField.text);
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    第二种方式

    B界面.h文件

    #import <UIKit/UIKit.h>
    @interface BViewController : UIViewController
    @property (copy, nonatomic) void (^MyBlock)(NSString *title);
    @end
    

    B界面.m文件

    - (void)quedingBtn:(id)sender
    {
        self.MyBlock(self.testTextField.text);
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    A界面

    第一种方式

    - (IBAction)tiaozhuanBtn:(id)sender {
        __weak ViewController *weakSelf = self;
        BViewController *view = [[BViewController alloc] init];
        view.myblock = ^(NSString *title){
            weakSelf.titleLab.text = title;
        };
        [self.navigationController pushViewController:view animated:YES];
    

    }

    第二种方式

    - (IBAction)tiaozhuanBtn:(id)sender {
         __weak ViewController *weakSelf = self;
        BViewController *view = [[BViewController alloc] init];
        view.MyBlock = ^(NSString *title){
            weakSelf.titleLab.text = title;
        };
        [self.navigationController pushViewController:view animated:YES];
    }
    

    这里需要注意block循环引用的问题,__weak修饰符定义一个变量来替换self,这样就可以解决block 中用self导致的循环引用,避免内存泄漏。

     __weak ViewController *weakSelf = self;
    

    block也可以在声明方法的时候用到,举个例子:

    .h中声明

    - (void)textblock:(void (^)(NSString *title))my block;
    

    .m中实现

    - (void)textblock:(void (^)(NSString *))myblock
    {
        myblock(self.testTextField.text);
    }
    

    .m中调用

    - (void)quedingBtn:(id)sender {
        [self textblock:^(NSString *title) {
            NSLog(@"%@",title);
        }];
    }

    相关文章

      网友评论

          本文标题:iOS block的简单使用

          本文链接:https://www.haomeiwen.com/subject/jzmbjttx.html