12345678 代表1-8種建立方式
引數介紹:
interval: 時間間隔,單位:秒,如果<0,系統預設為0.1
target: 定時器繫結物件,一般都是self
selector: 需要呼叫的例項方法
userInfo: 傳遞相關資訊
repeats: YES:迴圈 NO:執行一次就失效
block: 需要執行的程式碼塊 作用等同於 selector裡邊的方法體
invocation: 需要執行的方法,具體使用方法可以自己baidu,現在這個已經很少用了。
fireDate: 觸發的時間,一般都寫[NSDate date],這樣的話定時器會立馬觸發一次,並且以此時間為基準。如果沒有此引數的方法,則都是以當前時間為基準,第一次觸發時間是當前時間加上時間間隔interval
複製程式碼
#pragma mark - CreateTimer
- (void)createTimer{
NSInvocation *invocation = [[NSInvocation alloc] init];
//1
NSTimer *timer1 = [NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];
//2
[NSTimer scheduledTimerWithTimeInterval:1 invocation:invocation repeats:YES];
//3
[NSTimer timerWithTimeInterval:1 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
//4
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
//5 API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0))
[NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
//定時器需要執行的方法
}];
//6 API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0))
[NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
//定時器需要執行的方法
}];
NSDate *date = [NSDate date];
//7 API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0))
NSTimer *timer7 = [[NSTimer alloc] initWithFireDate:date interval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
//定時器需要執行的方法
}];
[timer7 fire];
//8
NSTimer *timer8 = [[NSTimer alloc] initWithFireDate:date interval:1 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
//該方法表示定時器只會執行一次,無視repeats
[timer8 fire];
}
- (void)doSomething{
NSLog(@"do something");
}
複製程式碼
一、 NSTimer 具體有八個方法來建立
12、34、56、78 是引數對應的關係
複製程式碼
二、 NSTimer建立可以分為三大類
timerWithTimeInterval
135
scheduledTimerWithTimeInterval
246
initWithFireDate
78
三、 按照執行方式又可以分為兩大類
一種需要手動加入runloop
13578、另一種就是自動加入runloop
246(弊端:runloop
只能是當前runloop
,模式是NSDefaultRunLoopMode
)
這裡需要注意一個問題,子執行緒的runloop
是預設不開啟的,在子執行緒建立timer
之後記得開啟[[NSRunloop currentRunloop] run]
。