美文网首页
2018-04-26

2018-04-26

作者: 博oo | 来源:发表于2018-04-26 18:02 被阅读0次

    假设对象A调用B来执行一项操作,操作一旦完成,对象A就必须知道对象B已完成任务且对象A将执行其他必要操作。

    A是B的委托对象

    B引用一个A

    A将实现B的委托方法

    B通过委托方法通知

    //协议定义

    @protocol MyDelegate<NSObject>

    ...代理方法

    @end

    ....

    @property(nonatomic,week)id<MyDelegate>delegate;

    截获自动变量值

    block表达式可截获所使用的自动变量的值.

    截获:保存自动变量的瞬间值.

    因为是“瞬间值”,所以声明Block之后,即便在Block外修改自动变量的值,也不会对Block内截获的自动变量值产生影响。

    inti =10;void(^blk)(void) = ^{NSLog(@"In block, i = %d", i); }; i =20;//Block外修改变量i,也不影响Block内的自动变量blk();//i修改为20后才执行,打印: In block, i = 10NSLog(@"i = %d", i);//打印:i = 20

    __block说明符号

    自动变量截获的值为Block声明时刻的瞬间值,保存后就不能改写该值,如需对自动变量进行重新赋值,需要在变量声明前附加__block说明符,这时该变量称为__block变量。

    例如:

    __blockinti =10;//i为__block变量,可在block中重新赋值void(^blk)(void) = ^{NSLog(@"In block, i = %d", i);    };    i =20;    blk();//打印: In block, i = 20NSLog(@"i = %d", i);//打印:i = 20

    相关文章

      网友评论

          本文标题:2018-04-26

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