NSTimer循环引用分析
下面的方法可以创建计时器,并将其预先安排到当前运行循环(Run Loop)当中:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget
selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
参数target和selector表示计时器将在哪个对象上调用哪个方法,repeats表示是否重复执行任务。
计时器会保留其目标对象,等到自身“失效”时再释放此对象。
(1)当repeats设置为NO时,执行完相关任务之后,计时器会自动失效;
(2)当调用invalidate方法时,可以令计时器失效;
因此将计时器设置成重复模式时,很容易导致“循环引用”的问题,必须自己调用invalidate方法,才能停止计时器。
NSTimer循环解决方案
第一种方法
- (void)viewDidLoad {
[super viewDidLoad];
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startTimer) userInfo:nil repeats:YES];
}
-(void)startTimer{