NSTimer 解决循环引用 自动取消

2018-06-09  本文已影响0人  ytsq

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了

demo

上一篇下一篇

猜你喜欢

热点阅读