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];
    }];
}

posted @ 2015-04-20 22:47  jisir  阅读(135)  评论(0编辑  收藏  举报