美文网首页
Block之我贱

Block之我贱

作者: Rokkia | 来源:发表于2016-06-06 12:04 被阅读11次

    本文只是写一下自己对与block的一些理解,不对的地方也请留言纠正.

    文章根据https://onevcat.com/2011/11/objc-block/

    根据网上的说明,block本质就是一段代码块,只是这个代码kuai可以获取到他所在的代码块里的其他变量,比如

    -(void) printStr{

    NSString *str = @"123";

    //创建一个block变量

    void(^block)(NSString *inputStr) = ^(NSString *inputStr)

        {

            NSLog(inputStr);

        }

    //问题来了,创建了怎么使用,方法很简单 如下

    block(str);

    }

    虽然block的声明看起来比较奇怪,但是习惯就好了(只能这样安慰自己)

    还好苹果为我们提供了另外一种声明方式  typedef ....

    改写上面方法

    typedef void(^Block)(NSString *inputStr) ;

    -(void) printStr{

    NSString *str = @"123";

    //创建一个block变量

    Block block = ^(NSString *inputStr)

    {

    NSLog(inputStr);

    }

    //问题来了你创建了怎么使用,方法很简单 如下

    block(str);

    }

    仔细一看貌似没有改变多少,但是用多了就会发现大有不同

    为了半天劲就为了打印一个Str,何必这样大费周章,通过看大神的文章,关于block大家貌似离不开回调这个词,用一个界面反向传值来解释一下,简单的firstViewController跳转到secondViewController,在跳转回firstViewController时,打印在第二界面传回的Str

    第一步简单跳转

    firstViewController.m和secondViewController.m

    - (void)viewDidLoad {

    [superviewDidLoad];

    UIButton*button = [UIButtonbuttonWithType:UIButtonTypeCustom];

    button.frame=CGRectMake(100,100,150,50);

    [self.viewaddSubview:button];

    button.backgroundColor= [UIColororangeColor];

    [buttonaddTarget:selfaction:@selector(buttonClick:)forControlEvents:UIControlEventTouchUpInside];

    }

    -(void)buttonClick:(UIButton*)sender{

    SecondViewController*secondController = [[SecondViewControlleralloc]init];

    [selfpresentViewController:secondControlleranimated:YEScompletion:nil];

    }

    secondViewController中

    - (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor= [UIColorwhiteColor];

    UIButton*button = [UIButtonbuttonWithType:UIButtonTypeCustom];

    button.frame=CGRectMake(100,100,150,50);

    [self.viewaddSubview:button];

    button.backgroundColor= [UIColororangeColor];

    [buttonaddTarget:selfaction:@selector(buttonClick:)forControlEvents:UIControlEventTouchUpInside];

    }

    -(void)buttonClick:(UIButton*)sender{

    self.backStrBlock(@"123");

    [selfdismissViewControllerAnimated:YEScompletion:nil];

    }

    简单的实现跳转返回

    第二步 在secondViewController里面添加block

    secondViewController.h

    typedefvoid(^BackStrBlock)(NSString*backStr);

    @interfaceSecondViewController :UIViewController

    -(void)setBlock:(BackStrBlock)backBlock;

    @end

    第三步实现添加block属性+实现.h中的方法

    @interfaceSecondViewController()

    @property(nonatomic,assign)BackStrBlockbackStrBlock;

    @end

    -(void)setBlock:(BackStrBlock)backBlock{

    self.backStrBlock= backBlock;

    }

    第四步在firstViewController实现跳转时调用setBlock方法

    -(void)buttonClick:(UIButton*)sender{

    ...

    BackStrBlock backBlock = ^(NSString*inputStr){

        NSLog(@"%@",inputStr);

    };

    [secondControllersetBlock:backBlock];

    ...

    }

    第五步在secondViewController里面恰当的时机执行block

    -(void)buttonClick:(UIButton*)sender{

    self.backStrBlock(@"123");

    ...

    }

    只是一个简单的例子,还需要多看多写才能了解更多,加油撒。

    相关文章

      网友评论

          本文标题:Block之我贱

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