代码块:是一种OC的一种数据类型,在iOS4时被引入,具有匿名函数的特性。它可以保存一段代码,并在合适的时候取出来调用。
场景: FirstViewController 跳转到SecondViewController, 然后又跳转回 FirstViewController,并带回SecondViewController中的数据.
步骤一:在SecondViewController.h文件中定义一个block
typedef void (^SecondBlock)(NSString*text);
步骤二:同样在SecondViewController.h声明一个SecondBlock的实例变量
@property (nonatomic, copy) SecondBlock secondBlock;
//注:因为block一开始是放在栈上的,使用copy修饰目的是防止在创建block时候的作用域外面调用block 而导致程序崩溃。同时为了能够在block的声明域外使用,所以才会要把block拷贝(copy)到堆。
步骤三:当SecondViewController要消失前,检查一下secondBlock是否在作用域外部被引用。如果是,发送数据。
if (self.secondBlock) {
self.secondBlock(_text.text);
}
以上工作做好之后,接下来就是调用。
当FirstViewController进入SecondViewController之前,调用secondBlock等待回调
__weak typeof(self) weakSelf = self;
SecondViewController* second = [[SecondViewController alloc]init];
second.secondBlock = ^(NSString* text) {
weakSelf.showLabel.text = text;
};
效果如下: