故事是這麼開始的
最近在替公司 app 做健康檢查,找到一些 memory leaks 的問題,其中一個就是由 NSTimer
所引起的 retain cycle。
NSTimer
是個很容易造成 retain cycle 的物件,無論是新手或是老手都很可能一個不留意就踩到這個坑。舉個很常見的例子,這樣寫就產生 retain cycle 了:
@interface MyViewController()
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
}
- (void)dealloc {
[_timer invalidate];
_timer = nil;
}
- (void)timerFired:(NSTimer *timer) {
// Do something...
}
@end