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