我們在開發的過程中,可能會用到計時器,foundation框架中有個類叫做nstimer。我們可以指定絕對的日期與時間,也可以指定執行任務的相對延遲時間,還可以重複執行任務,下面我們來看一下nstimer的使用。
計時器要和「執行迴圈」相關聯,執行迴圈到時候會觸發任務。建立nstimer時,可以將其「預先安排」在當前的執行迴圈中,也可以先建立好,然後由開發者自己來排程。不管何種方式,只有把計時器放在執行迴圈裡,計時器才能正常觸發任務。
**如下,計時器的初始化
情況一:
nstimer *timer = [nstimer timerwithtimeinterval:5 target:self selector:@selector(printname) userinfo:nil repeats:yes];
[[nsrunloop currentrunloop] addtimer:timer formode:nsdefaultrunloopmode];
情況二:
nstimer *timer = [nstimer scheduledtimerwithtimeinterval:5 target:self selector:@selector(printname) userinfo:nil repeats:yes];
第一種初始化方法,沒有scheduled,所以必須手動addtimer:,將timer新增到runloop中;第二種有scheduled的初始化方法,將以預設的mode將timer新增到當前的runloop中。
如果不想在當前的runloop中,執行timer方法,可以自己新建乙個runloop。
nsrunloop *loop = [nsrunloop currentrunloop];
[loop run];
計時器的停止
只有一種方法可以將timer移除runloop。
[timer invalidate];
因為計時器nstimer會保留目標物件,等到自身失效時再釋放此物件。呼叫invalidate方法可令計時器失效;執行完相關任務後,一次性的計時器也會失效。如果將計時器設定成重複執行模式,那麼必須自己手動呼叫invalidate方法,才能令其停止。
由於計時器會保留其目標物件,所以反覆執行任務通常會導致程式出問題。也就是說,設定成重複執行模式的那種計時器,容易形成「引用迴圈」。所以這種情況下,一定要記得呼叫終止計時器的invalidate方法。
iOS中定時器NSTimer使用
呼叫一次計時器方法 cpp view plain copy mytimer nstimer scheduledtimerwithtimeinterval 1.5 target self selector selector scrolltimer userinfo nil repeats no 不重複...
IOS開發中NSTimer定時器的使用
第一步 呼叫函式 self getcirclebackground self.blcview.btchartview.mcircleview getcurrentlb self.blcview.btchartview.mcurrent 第二步 方法的實現 void getcirclebackgrou...
iOS中定時器NSTimer的使用 開啟與關閉
一.只呼叫一次計時器方法 不重複,只呼叫一次。timer執行一次就會自動停止執行 mytimer nstimer scheduledtimerwithtimeinterval 1.5 target self selector selector function userinfo nil repeat...