使用系统的某些block api(如UIView的block版本写动画时),是否也考虑循环引用问题?
2017-09-13 18:48
731 查看
系统的某些block api中,UIView的block版本写动画时
以下这些使用方式
但如果方法中的一些参数是 成员变量,那么可以造成循环引用,如 GCD 、NSNotificationCenter调用就要小心一点,比如 GCD 内部如果引用了 self,而且 GCD 的参数是 成员变量,则要考虑到循环引用,举例如下:
GCD
分析:self-->_operationsQueue-->block-->self形成闭环,就造成了循环引用
NSNotificationCenter
分析:self-->_observer-->block-->self形成闭环,就造成了循环引用
不需要考虑,
但也有一些api 需要考虑
以下这些使用方式
不会引起循环引用的问题
[UIView animateWithDuration:duration animations:^ { [self.superview layoutIfNeeded]; }]; [[NSOperationQueue mainQueue] addOperationWithBlock:^ { self.someProperty = xyz; }]; [[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * notification) { self.someProperty = xyz; }];
但如果方法中的一些参数是 成员变量,那么可以造成循环引用,如 GCD 、NSNotificationCenter调用就要小心一点,比如 GCD 内部如果引用了 self,而且 GCD 的参数是 成员变量,则要考虑到循环引用,举例如下:
GCD
分析:self-->_operationsQueue-->block-->self形成闭环,就造成了循环引用
__weak __typeof__(self) weakSelf = self; dispatch_group_async(_operationsGroup, _operationsQueue, ^ { [weakSelf doSomething]; [weakSelf doSomethingElse]; } );
NSNotificationCenter
分析:self-->_observer-->block-->self形成闭环,就造成了循环引用
__weak __typeof__(self) weakSelf = self; _observer = [[NSNotificationCenter defaultCenter] addObserverForName:@"testKey" object:nil queue:nil usingBlock:^(NSNotification *note){ [weakSelf dismissModalViewControllerAnimated:YES]; }];
相关文章推荐
- 使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
- 使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
- Block使用中的一些疑问解答(包括循环引用问题的解决)
- iOS细节篇-block循环引用问题,和block安全使用方法
- 最近在使用swift写代码时碰到block引用循环的问题。记下一笔以免忘记。
- Objective-c中block使用时的循环引用问题
- iOS: ARC和非ARC下使用Block与循环引用问题
- MRC和ARC下使用block的循环引用问题
- block使用小结、在arc中使用block、如何防止循环引用
- 在block循环引用的问题中__block和 __weak 的选择
- php foreach循环中使用引用的问题
- ARC下的block导致的循环引用问题解析
- block使用小结、在arc中使用block、如何防止循环引用
- Block的引用循环问题 (ARC & non-ARC)
- Block的引用循环问题 (ARC & non-ARC)
- 使用weak strong dance 解决 block 循环引用
- ARC的基本使用、ARC循环引用解决方案、block、protoco 协议
- 关于Block的copy和循环引用的问题
- block使用小结、在arc中使用block、如何防止循环引用
- block使用小结、在arc中使用block、如何防止循环引用