iOS笔记 - block在使用中的若干问题
一、错误地使用 __block
1 - 错误代码
1 __block ViewController* weakSelf = self; 2 dispatch_async(dispatch_get_main_queue(), ^{ 3 weakSelf.xx = xx; 4 });
说明:dispatch_async 并不知道 self 会在什么时候被释放,为了防止系统调度执行 block 中的任务时 self 被意外释放掉,dispatch_async 会自己进行一次 retain self 的处理,并且当任务完成后自行 release self,但这里使用了 __block 就会使 dispatch_async 不再增加 self 的引用计数,使得系统在调度执行 block 之前,self 很可能已被销毁
正解:把 __block 关键字移除即可