IOS 中NSTimer定時器的使用
NSTimery 定時器,主要用于進行定時執行指定方法,常用場景如:獲取驗證碼的按鈕倒計時;圖片輪播定時。
1 使用注意事項:
1.1 倒計時時間間隔(時間單位是秒)
1.2 指定的執行方法
1.3 實現指定執行方法的對象
1.4 是否重復執行
2 對象的內存管理及銷毀
2.1 使用方法" invalidate "進行停止
2.2 將對象設置為" nil "
2.3 特別是在返回到其他視圖控制器的時候,要在方法" - (void)viewWillDisappear:
(BOOL)animated "中(注意:不能在方法" - (void)dealloc 在設置)將timer停止,并設置為nil
// 有效釋放 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [timer invalidate]; timer = nil; } // 無效釋放 - (void)delloc { [timer invalidate]; timer = nil; }
3 計時器啟用關閉繼續
3.1 開始:
timer.fireDate = [NSDate distantPast];
3.2 停止:
timer.fireDate = [NSDate distantFuture];
3.3 繼續:
[timer setFireDate:[NSDate date]];
使用示例(倒計時):
三種實例化方法,級對應的停止方法
方法1
// 實例化方法1 初始化后即開始執行 if (self.timer == nil) { self.time = 10.0; // 帶參數 NSNumber *number = @(self.time); self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:number repeats:YES]; // 非必要設置,實際已設置為 NSDefaultRunLoopMode 模式 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; }
// 關閉定時器方法1 [self.timer invalidate]; self.timer = nil;
方法2
// 實例化方法2 初始后化,需要調用" setFireDate "才開始執行 if (self.timer == nil) { self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDownTime:) userInfo:nil repeats:YES]; // 非必要設置,實際已設置為 NSDefaultRunLoopMode 模式 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; [self.timer setFireDate:[NSDate distantFuture]]; } self.time = 10.0; [self.timer setFireDate:[NSDate distantPast]];
// 關閉定時器方法2 [self.timer setFireDate:[NSDate distantFuture]];
方法3
// 實例化方法3 初始化后,需要調用" fire "才開始執行 if (self.timer == nil) { self.timer = [NSTimer timerWithTimeInterval:1.0 target: self selector:@selector(countDownTime:) userInfo:nil repeats:YES]; // 必須設置 NSRunLoop 線程池,否則無效 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } self.time = 10.0; [self.timer fire];
// 關閉定時器方法3 [self.timer invalidate]; self.timer = nil;
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站 的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。