ios 原生开发不占用主线程的计时器(基于我之前写的计时器的二次封装)

XMTimer教程:XMTimer

先导入XMTimer.h

自定义一个继承自XMTimer的类

#import "XMTimer.h"

@interface XMSyncTimer : XMTimer

@end


实现它的方法
#import "XMSyncTimer.h"

@implementation XMSyncTimer


+ (void)startTimerTask:(NSTimeInterval)startTime interval:(NSTimeInterval)interval taskBlock:(taskBlock)block{
  //创建线程
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        //执行XMTimer的方法
        [super startTimerTask:startTime interval:interval taskBlock:block];
        
    }];
    
    [thread start];
}

+ (void)startTimerTask:(NSTimeInterval)startTime durationTime:(NSTimeInterval)durationTime taskBlock:(taskBlock)block{
    //创建线程
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        //执行XMTimer的方法
        [super startTimerTask:startTime durationTime:durationTime taskBlock:block];
        
    }];
    
    [thread start];
}

+ (void)startTimerTask:(NSTimeInterval)startTime interval:(NSTimeInterval)interval durationTime:(NSTimeInterval)durationTime taskBlock:(taskBlock)block taskEndBlock:(taskBlock)taskEndBlock{
    
    //创建线程
    NSThread *thread = [[NSThread alloc] initWithBlock:^{
        //执行XMTimer的方法,结束计时器代码块这里要注意,这里需要再写一个代码块,把参数代码块放进这个代码块里,再加一句结束线程就可以了
        [super startTimerTask:startTime interval:interval durationTime:durationTime taskBlock:block taskEndBlock:^{
            taskEndBlock();
            [thread cancel];
        }];
        
    }];
    
    [thread start];
    
}



思路是把XMTimer的计时器放进一个线程里,他就不会阻塞程序的运行了。

测试

	UIView *sview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 375, 100)];
	    [sview setBackgroundColor:[UIColor grayColor]];
	    [self.view addSubview:sview];
	    [XMSyncTimer startTimerTask:1 interval:0.01 durationTime:5 taskBlock:^{
	        dispatch_async(dispatch_get_main_queue(), ^{
	            [sview setFrame:CGRectMake(sview.frame.origin.x , sview.frame.origin.y + 1, 	sview.frame.size.width, sview.frame.size.height)];
	            [sview setAlpha:sview.alpha-0.002];
	        });
	
	    } taskEndBlock:^{
	        NSLog(@"关闭");
	    }];


发布了31 篇原创文章 · 获赞 30 · 访问量 7389

猜你喜欢

转载自blog.csdn.net/qq_41586150/article/details/104087888