iOS开发20-iOS开发中要注意的循环引用
1、计时器NSTimer
类持有了myTimer,myTimer又持有了self,造成循环引用。
NSTimer会持有对象,所以在删除对象之前,需要将timer invalidate。
[ _myTimer invalidate ];
_myTimer = nil;
2、block
typedef void (^myBlock)();
@property (nonatomic, strong) myBlock block1;
如果有循环引用,编译器会提示警告。
如果对象没有持有Block对象,那么不会产生循环引用。
如果对象持有了block对象,那么在block引用self的时候这么定义:
__weak typeof(self) weakSelf = self;
3、代理delegate
声明delegate时要用assign(MRC)或者weak(ARC),不要使用retain或者strong,会造成循环引用。