iOS--storyBoard使用Block传值
1. 在方法里面定义的Block是存储在栈区的,方法调用完毕之后Block占用的内存就会被销毁.如果需要在其他方法里面使用该Block需要把Block定义成属性,修饰成copy,这样 就会把栈区的内容拷贝一份到堆区.
2. 解决Block的内存循环引用问题.
当一个对象对Block持有所有权.在Block又使用该对象的内容(self或者该对象的实例变量),会导致Block的内存循环引用 解决方案,在ARC中用__weak修饰该指针, 在MRC中用__Block修饰该指针.
//点击cell跳转时触发
// In a storyboard-based application, you will often want to do a little preparation before navigation
在使用storyBoard时进行传值是的操作.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//得到目的视图
DetailViewController * detailVC = [segue destinationViewController];
//得到点击的cell
ContactTableViewCell * cell = sender;
//得到索引值
NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
//传值.
detailVC.string = [self.MArray objectAtIndex:indexPath.row];
__weak ContactTableViewCell *cellTwo = cell;
__weak DetailViewController *detailTwoVC = detailVC;
[detailTwoVC showTFStringBlock:^(NSString *str) {
//给cell赋值.
cellTwo.aLabel.text = str;
//在MRC下用__BLock解决循环引用问题防止引用计数加1, 在ARC环境下用__weak解决循环引用问题,防止cell,detailVC所持有的对象引用计数加一.
detailTwoVC.view.backgroundColor = [UIColor redColor];
}];
}