iOS中定时器NSTimer会对target强引用,定时器本身也需要给被强引用,要不然不会执行定时任务.经常会形成循环引用,所以返回的时候,必须要停止定时器.要不然不会释放.
最近新写了一个定时器,利用消息转发机制,避免循环引用,使用方便.可以自动销毁控制器.
用法如下,直接给NSObject添加的分类 方法导入头文件后直接使用, 默认已经添加runloop了
- (void)viewDidLoad {
[super viewDidLoad];
//这是开启定时器 比正常的定时器多了一个key,取消定时器时候使用
[self scheduledTimerWithTimeInterval:2 target:self
selector:@selector(test)userInfo:nilrepeats:YESkey:@"abc"];
[self scheduledTimerWithTimeInterval:2 target:self
selector:@selector(test2)userInfo:nilrepeats:YESkey:@"abc1"];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event {
//取消定时器 根据key取消
[self stopTimerWithKey:@"abc1"];
}
- (void)test {
NSLog(@"哈哈哈 我正在运行test1");
}
- (void)test2 {
NSLog(@"哈哈哈 我正在运行test2");
}
好了 ,这样就可以愉快的使用timer了