美文网首页
NSTimer 解决循环引用 自动取消

NSTimer 解决循环引用 自动取消

作者: ytsq | 来源:发表于2018-06-09 10:47 被阅读0次

    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

    相关文章

      网友评论

          本文标题:NSTimer 解决循环引用 自动取消

          本文链接:https://www.haomeiwen.com/subject/rwhteftx.html