关于Block的一个经典bug

2017-09-18  本文已影响11人  元昊

之前常常遇到block的循环引用问题,就稍微研究了一下,block对于访问外部对象类型有严格的限制,通常会使用__block,__week修饰一下,然而这二者也还是有区别的,具体后期补上
先说遇到的问题

ProductDetailVC *productVC = [[ProductDetailVC alloc] init];

            
            goodsCell.selectBolck = ^(NSUInteger index) {
              
                
                GolbalGoodsModelgoods *goods = _golbalGoodsArr[index];
                
                productVC.pro_id = goods.pro_id;
                
                [self.navigationController pushViewController:productVC animated:YES];
                
            };

这是一开始的代码,每次取到的pro_id都是不同的,但是没次打开都是一个pro_id,回头想一下才明白还是block引用的问题。

 goodsCell.selectBolck = ^(NSUInteger index) {
              
                ProductDetailVC *productVC = [[ProductDetailVC alloc] init];
                
                GolbalGoodsModelgoods *goods = _golbalGoodsArr[index];
                
                productVC.pro_id = goods.pro_id;
                
                [self.navigationController pushViewController:productVC animated:YES];
                
            };

如此便解决

参考链接:
http://www.jianshu.com/p/8995a60384fd

http://www.jianshu.com/p/a19f6dbb14da

上一篇下一篇

猜你喜欢

热点阅读