NSTimer的使用

場景A
  • 調(diào)用一次計(jì)時(shí)器方法
//不重復(fù),只調(diào)用一次。timer運(yùn)行一次就會(huì)自動(dòng)停止運(yùn)行
[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];  
  • 重復(fù)調(diào)用計(jì)時(shí)器方法
//每1秒運(yùn)行一次function方法。
 timer = 
 [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(function:) userInfo:nil repeats:YES];  

注意:將計(jì)數(shù)器的repeats設(shè)置為YES的時(shí)候,self的引用計(jì)數(shù)會(huì)加1。因此可能會(huì)導(dǎo)致self(即viewController)不能release,所以,必須在dealloc的時(shí)候,將計(jì)數(shù)器timer停止,否則可能會(huì)導(dǎo)致內(nèi)存泄露。

  • 取消定時(shí)器

停止timer的運(yùn)行,但這個(gè)是永久的停止:(注意:停止后,一定要將timer賦空,否則還是沒有釋放。不信?你自己試試~)

//取消定時(shí)器  
[timer invalidate];
timer = nil;  
場景B

要想實(shí)現(xiàn):先停止,然后再某種情況下再次開啟運(yùn)行timer,可以使用下面的方法:
首先關(guān)閉定時(shí)器不能使用上面的方法,應(yīng)該使用下面的方法:

  • 暫停定時(shí)器
[myTimer setFireDate:[NSDate distantFuture]];  
  • 繼續(xù)定時(shí)器
[myTimer setFireDate:[NSDate distantPast]];  
場景C

例子:比如,在頁面消失的時(shí)候關(guān)閉定時(shí)器,然后等頁面再次打開的時(shí)候,又開啟定時(shí)器。
(主要是為了防止它在后臺(tái)運(yùn)行,暫用CPU)可以使用下面的代碼實(shí)現(xiàn):

//頁面將要進(jìn)入前臺(tái),開啟定時(shí)器  
-(void)viewWillAppear:(BOOL)animated  
{  
    //開啟定時(shí)器  
    [scrollView.myTimer setFireDate:[NSDate distantPast]];  
}  
  
//頁面消失,進(jìn)入后臺(tái)不顯示該頁面,關(guān)閉定時(shí)器  
-(void)viewDidDisappear:(BOOL)animated  
{  
    //關(guān)閉定時(shí)器  
    [scrollView.myTimer setFireDate:[NSDate distantFuture]];  
}  
場景D

NSTimer和UIScrollView的用法

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 300)];
 [self.view addSubview:scrollView];
    
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(method:) userInfo:nil repeats:YES];

//修改當(dāng)前runloop的mode為NSRunLoopCommonModes
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

NSDefaultRunLoopMode 默認(rèn)模式
UITrackingRunLoopMode 拖動(dòng)默認(rèn)(一般用在滾動(dòng)視圖)
NSRunLoopCommonModes 可配置的一組模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NSTimer繼承自NSObject,用于創(chuàng)建定時(shí)器對(duì)象,以提供執(zhí)行延遲動(dòng)作或周期性動(dòng)作的方法。通常情況下,創(chuàng)建的...
    蹲瓜閱讀 6,390評(píng)論 0 5
  • 原文鏈接 你可以使用的定時(shí)器類來創(chuàng)建一個(gè)定時(shí)器對(duì)象,或者更簡單地說,定時(shí)器。一個(gè)定時(shí)器在指定的時(shí)間到達(dá)后觸發(fā),并發(fā)...
    dacheng閱讀 1,305評(píng)論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,511評(píng)論 19 139
  • 自我介紹: 姓名:桃花島住了個(gè)桃花仙 老家:安徽 身高:168CM 體重:94斤 出生日期:1996/2/22 職...
    桃花島住了個(gè)桃花仙閱讀 1,817評(píng)論 82 17
  • 今天飽餐一頓后心血來潮要到當(dāng)?shù)氐男@去走一回,不料與朋友一拍即合,遂一堆大齡青年嘻嘻哈哈地重新踏上久違的校園,看到...
    21不思量閱讀 185評(píng)論 0 0

友情鏈接更多精彩內(nèi)容