码迷,mamicode.com
首页 > 其他好文 > 详细

ARC中注意Block的泄漏问题

时间:2015-03-20 20:19:00      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

代码中block经常用到。例如网络请求?一些图形分析处理等,就是比较耗时的操作,多线程gcd然后进行操作。

这个时候,会使用block进行处理,然后调用相应的处理逻辑。

可能会对当前对象进行一些处理,现在分享的也就是这样的一种内存泄漏情况:

正常来说:释放内存都会调用dealloc函数,但是如果是下面的代码:

1 NSURLConnection sendAsynchronousRequest:xxReq queue:xxQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
2         self.xxData = data;
3 }
4 [self.navigationController popViewControllerAnimated:YES];

几个关键点:

1.block是强持有self的(strong)。

2.self对象不会释放了。因为退出了之后,block不会再进行销毁操作了。没有再dealloc了。这样的逻辑就是因为,有一些逻辑就是要强持有。就是有这样需求。

 

解决方法也非常简单:

__weak typedef(self) weakSelf = self;

self.xxData  ->  weakSelf.xxData;

 

参考网站:stackflow 

ARC中注意Block的泄漏问题

标签:

原文地址:http://www.cnblogs.com/Lxiaolong/p/4354428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!