Block的使用
目的: AController跳轉到BController, 然后從BController傳值回AController.
第一步
在BController.h頁面聲明block
typedef void(^MyBlock)(UIColor *var1,NSString *var2);
@property (nonatomic, copy) MyBlock block;
第二步
在AController.m文件
//將當前的self弱引用
//__weak typeof(self) weakSelf = self;
BController *bC = [[BController alloc]init];
__weak BController *weakSelf = self;
bC.block = ^(UIColor *var1, NSString *var2){
NSLog(@"%@",var2);
weakSelf.view.backgroundColor = var1;
};
[self.navigationController pushViewController:b animated:true];
第三步
在BController.m的任意位置中
self.block([UIColor redColor], @"str");
在這里有一點需要注意就是Block的使用引起的循環引用。如果在Block中使用附有__strong修飾符的對象類型自動變量,那么當Block從棧復制到堆時,改對象為Block所有。這樣容易引起循環引用,從而發生內存泄漏,然而我們只需要保證當前控制器也就是self在需要釋放的時候正確釋放就可以