以前block调用用的也是同样的方法,但是这次就Crash了,无脑crash,一调用就crash,控制台还不打印任何crash信息,然后问度娘说是野指针问题,说实话,一行一行代码看的,找了几个小时,后来发现原来是导航控制器push的时候创建了新的实例,导致系统把老的实例释放掉了(蛋疼)。
先说下我要实现的功能:从根控制器跳到第一个控制器,然后在第一个控制器中调用block改变根个控制器的背景色并返回第一个控制器。
第一个控制器中的代码:
// 将要跳转的第二个控制器
@property (nonatomic, strong) BSOneController *oneVC;
- (void)viewDidLoad {
[super viewDidLoad];
BSOneController *oneVC = [[BSOneController alloc] init];
self.oneVC = oneVC;
oneVC.changeColor = ^(UIColor *color) {
self.view.backgroundColor = color;
[self.navigationController popViewControllerAnimated:YES];
};
}
- (void)goOneVC:(UIButton *)btn{
// 崩溃原因:就是在这里又创建了一个新的实例,导致上面self.oneVC被提前释放,然后又调用实例的block导致crash
// BSOneController *one = [[BSOneController alloc] init];
// [self.navigationController pushViewController:one animated:YES];
[self.navigationController pushViewController:self.oneVC animated:YES];
}