第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用NSTimer?

如何使用NSTimer?

iOS
慕勒3428872 2019-06-06 16:13:43
如何使用NSTimer?如何使用NSTimer?有人能給我一步的指示嗎?
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

首先,我想提請您注意Cocoa/CF文檔(這始終是一個偉大的第一端口)。Apple文檔在每篇參考文章的頂部都有一個叫做“Companion Guides”的部分,其中列出了文檔主題的指南(如果有的話)。例如,用NSTimer文獻列出兩個配套指南:

對于您的情況,Timer編程主題的文章可能是最有用的,而線程主題是相關的,但不是最直接與所記錄的類相關的。如果您查看Timer編程主題文章,它分為兩部分:

  • 定時器
  • 使用計時器

對于采用這種格式的文章,通常會概述類及其用途,然后介紹一些示例代碼多么,怎樣若要使用它,請在本例中的“使用計時器”部分中使用。有關于“創(chuàng)建和調度計時器”、“停止計時器”和“內存管理”的部分。從本文中,可以創(chuàng)建一個計劃好的、不重復的計時器,如下所示:

[NSTimer scheduledTimerWithTimeInterval:2.0
    target:self
    selector:@selector(targetMethod:)
    userInfo:nil
    repeats:NO];

這將創(chuàng)建一個在2.0秒后觸發(fā)并調用的計時器targetMethod:在……上面self使用一個參數,該參數是指向NSTimer舉個例子。

如果您想更詳細地查看該方法,您可以參考文檔獲得更多信息,但是代碼也有解釋。

如果要停止重復的計時器(或在不重復計時器觸發(fā)前停止它),則需要保留指向NSTimer實例;這通常需要是一個實例變量,以便您可以在另一個方法中引用它。然后你可以打電話給invalidateNSTimer例如:

[myTimer invalidate];myTimer = nil;

這也是很好的做法nil退出實例變量(例如,如果使計時器無效的方法被多次調用,而實例變量尚未設置為nilNSTimer實例已被解除分配,它將引發(fā)異常)。

還請注意本文末尾關于內存管理的要點:

因為Run循環(huán)從內存管理的角度來維護計時器。通常情況下,在調度計時器之后,不需要保留對它的引用..由于計時器在將其方法指定為選擇器時作為參數傳遞,在適當的情況下,可以在該方法中使重復計時器失效。..然而,在許多情況下,您還想要使計時器無效的選項-甚至在計時器開始之前。在這種情況下,您確實需要保持對計時器的引用,以便在適當的時候發(fā)送一條無效消息。..如果您創(chuàng)建了一個非計劃計時器(請參閱“非計劃計時器”),那么您必須維護對計時器的強烈引用(在引用計數環(huán)境中,您保留它),以便在使用它之前不會將它釋放。


查看完整回答
反對 回復 2019-06-06
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

有幾種使用計時器的方法:

1) 計劃計時器&使用選擇器

NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 2.0
                      target: self
                      selector:@selector(onTick:)
                      userInfo: nil repeats:NO];
  • 如果將重復設置為“否”,則計時器將在運行選擇器之前等待2秒,然后停止運行;
  • 如果重復:是的,計時器將立即啟動,并將重復調用選擇器每2秒;
  • 若要停止計時器,請調用計時器的-無效方法:[t無效];

另外,您可以使用以下簡單語句,而不是使用不重復的計時器,而是在指定的間隔之后調用選擇器:

[self performSelector:@selector(onTick:) withObject:nil afterDelay:2.0];

這將具有與上面的示例代碼相同的效果;但是如果您想每隔第九次調用選擇器,則使用帶有重復的定時器:是的;

2) 自定時器

NSDate *d = [NSDate dateWithTimeIntervalSinceNow: 60.0];NSTimer *t = [[NSTimer alloc] initWithFireDate: d
                              interval: 1
                              target: self
                              selector:@selector(onTick:)
                              userInfo:nil repeats:YES];NSRunLoop *runner = [NSRunLoop currentRunLoop];
                              [runner addTimer:t forMode: NSDefaultRunLoopMode];[t release];
  • 這將創(chuàng)建一個定時器,該定時器將在您指定的自定義日期(在本例中為一分鐘后)啟動,并且每隔一秒重復一次。



3) 計劃外計時器&使用調用

NSMethodSignature *sgn = [self methodSignatureForSelector:@selector(onTick:)];NSInvocation *inv = [NSInvocation invocationWithMethodSignature:
 sgn];[inv setTarget: self];[inv setSelector:@selector(onTick:)];NSTimer *t = [NSTimer timerWithTimeInterval: 1.0
                      invocation:inv 
                      repeats:YES];

在此之后,您可以在需要時手動啟動計時器,如下所示:

NSRunLoop *runner = [NSRunLoop currentRunLoop];[runner addTimer: t forMode: NSDefaultRunLoopMode];



作為注釋,onTick:Method如下所示:

-(void)onTick:(NSTimer *)timer {
   //do smth}


查看完整回答
反對 回復 2019-06-06
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

就像這樣:

NSTimer *timer;

    timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
                     target: self
                     selector: @selector(handleTimer:)
                     userInfo: nil
                     repeats: YES];


查看完整回答
反對 回復 2019-06-06
  • 3 回答
  • 0 關注
  • 508 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號