NSTimerImprovement 0.0.2

NSTimerImprovement 0.0.2

liuchongfaye 维护。



  • 刘冲

NSTimerInprovement

NSTimerInprovement这个库解决了定时器循环应用bug,并集成了NSRunloop技术(苹果官方文档中提到过此技术),同时还管理了NSTimer的生命周期,再也不用担心NSTimer何时释放的问题了。

如何使用

在使用需要定时器的对象中声明一个属性,例如:

@property (nonatomic, strong) NSTimerInprovement *timerInprovement;   // 必须要如此才行,否则会导致崩溃

使用 NSTimerInprovement 替代定时器时有6种方法,分别对应于 NSTimer 的6种创建定时器的方法,分别是:方法1:

// 此方法等同于 NSTimer 的 "+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo"
self.timerInprovement = [NSTimerInprovement ns_timerWithTimeInterval:1.0 target:self selector:@selector(timerFire:) userInfo:nil repeats:YES];

方法2:

// 此方法等同于 NSTimer 的"+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo"
self.timerInprovement = [NSTimerInprovement ns_scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFire:) userInfo:nil repeats:YES];

方法3:

// 此方法等同于 NSTimer 的"+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block",但是仅适用于iOS 10.0以上的系统
// 注意内存泄漏
__weak typeof(self) weakSelf = self;
self.timerInprovement = [NSTimerInprovement ns_timerWithTimeInterval:1.0 repeats:YES block:^(NSTimer *timer) {
    [weakSelf timerFire:timer];
 }];

方法4:

// 此方法等同于 NSTimer 的 "+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block",但是仅适用于iOS 10.0以上的系统
// 注意内存泄漏
__weak typeof(self) weakSelf = self;
self.timerInprovement = [NSTimerInprovement ns_scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer *timer) {
    [weakSelf timerFire:timer];
}];

方法5:

// 此方法等同于 NSTimer 的 "- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep"
NSDate *date = [[NSDate date] dateByAddingTimeInterval:10.0];
    self.timerInprovement = [NSTimerInprovement ns_scheduledTimerWithFireDate:date interval:1.0 target:self selector:@selector(timerFire:) userInfo:nil repeats:YES];

方法6:

// 此方法等同于 NSTimer 的 "- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block",但是仅限于iOS 10.0以上
// 注意内存泄露
__weak typeof(self) weakSelf = self;
    NSDate *date = [[NSDate date] dateByAddingTimeInterval:10.0];
    self.timerInprovement = [NSTimerInprovement ns_scheduledTimerWithFireDate:date interval:1.0 repeats:YES block:^(NSTimer *timer) {
        [weakSelf timerFire:timer];
    }];

除此之外,NSTimer 还有两个基于 NSInvocation 实现的方法,这里就不再详细说明了。

如果需要对 NSTimer 对象进行操作,例如执行 'invalidate' 操作,可以像下面这样从 NSTimerInprovement 对象的.h 文件中获取 NSTimer 对象(出于安全考虑,这个属性是只读的):

[self.timerInprovement.timer invalidate];

安装(Installation)

可以下载此工程,将 NSTimerInprovement 类的 .h 和 .m 文件拖到自己的项目当中,也可以使用 Cocoapods 进行管理,只需在 Podfile 文件中写入以下代码然后执行 'pod install' 即可:

pod 'NSTimerInprovement'