iOS--storyBoard使用Block传值

1. 在方法里面定义的Block是存储在栈区的,方法调用完毕以后Block占用的内存就会被销毁.若是须要在其余方法里面使用该Block须要把Block定义成属性,修饰成copy,这样     就会把栈区的内容拷贝一份到堆区.app

2. 解决Block的内存循环引用问题.spa

当一个对象对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];
    }];
}内存

相关文章
相关标签/搜索