為什么有weakTimer?
因為直接在控制器中使用定時器方法[timerWithTimeInterval: target: selector: userInfo: repeats:]或者[scheduledTimerWithTimeInterval],會出現(xiàn)循環(huán)引用的情況.在控制器的delloc方法中銷毀定時器有可能是不成功的,因為控制器被循環(huán)引用,根本不可能被釋放,所以走不到這個方法來.
循環(huán)引用的過程:viewController->timer->target:viewController.
解決方案:viewController->weakTimer->timer.
使用方法如下
- 導(dǎo)入頭文件->#import "TPWeakTimer.h"
- 使用代碼:
#import "TempViewController.h"
#import "TPWeakTimer.h"
@interface TempViewController ()
//懶加載初始化
@property (nonatomic, strong) TPWeakTimer *timer;
@end
@implementation TempViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
//調(diào)用方法一
//[self.timer tp_scheduledTimerWithTimeInterval:1 userInfo:nil repeat:YES userInfoBlock:^(id obj) {
// NSLog(@"123");
//}];
//調(diào)用方法二
[self.timer tp_timerWithTimeInterval:1 userInfo:nil repeat:YES userInfoBlock:^(id obj) {
//這里寫你要做的定時器操作
NSLog(@"123");
}];
}
- (void)dealloc{
//銷毀定時器
[self.timer fireTimer];
NSLog(@"%s",__func__);
}
/*
*/
- (TPWeakTimer *)timer
{
if (!_timer) {
_timer = [[TPWeakTimer alloc] init];
}
return _timer;
}
github地址,請戳!