- delegate 循环引用
如果delegate使用strong修饰容易引起循环引用 - block 循环引用
block和self的相互持有会造成循环引用
为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,如下
__weak typeof(self) weakSelf = self;
[self doSomeBlockJob:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf) {
...
}
}];
- NSTimer 循环引用
timer和self的相互引用造成循环引用
在删除对象之前,需要将timer的invalidate方法。
[_timer invalidate];
_timer = nil;
- NSArray加入self造成循环引用
@interface SomeObj : NSObject
@property (nonatomic, strong) NSMutableArray *array;
@end
[_array addObject:self];
- 使用类别添加属性
比如:有一个类A,给A动态添加属性p。如果p中再引用类A,容易造成循环引用
或许还有其他场景,欢迎建议、点评、指正、增加。谢谢!