假设对象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
网友评论