2018-04-26

2018-04-26  本文已影响0人  博oo

假设对象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

上一篇下一篇

猜你喜欢

热点阅读