@interface DemoViewController ()
@property(nonatomic,copy)void (^completionCallBack)();
@end
@implementation DemoViewController
- (void)viewDidLoad {
[super viewDidLoad];
//解除循环引用
// //方法一 : __weak
// __weak typeof(self) weakSelf = self;
//
// [self LoadData:^{
// NSLog(@"%@",weakSelf.view);
// }];
//方法二 : __unsafe_unretained
//高级iOS程序员如果需要自行管理内存,可以考虑使用,但是不建议用
__unsafe_unretained typeof(self) weakSelf = self;
//EXC_BAD_ACCESS 坏内存访问,野指针访问
//__unsafe_unretained 同样是 assign 的引用(MRC 中没有 week)
//在 MRC 中如果要弱引用对象都是使用 assgin,不会增加引用计数,但是对象一旦被释放,地址不会改变,继续访问会出现野指针情况
//在 ARC 中,week 本质上是一个观察者模式,一旦发现对象被释放,会自动将地址设置为 nil更加安全
//week 的效率会略微差一点
[self LoadData:^{
NSLog(@"%@",weakSelf.view);
}];
}
-(void)LoadData:(void (^) ())completion
{
//使用属性记录block
self.completionCallBack= completion;
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"耗时操作 : %@",[NSThread currentThread]);
[NSThread sleepForTimeInterval:2.0];
dispatch_async(dispatch_get_main_queue(), ^{
//执行block
completion();
});
});
}
iOS开发解决循环引用问题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 关注仓库,及时获得更新:iOS-Source-Code-AnalyzeFollow: Draveness · Gi...
- 上次处理了一个因为控制器被某种强引用而无法释放掉,系统没用帮我们释放掉此对象的这块内存的问题,控制器在pop出栈的...