第一種:
[uiview animatewithduration:3 delay:3 options:1 animations:^ completion:^(bool finished) ];//不會阻塞執行緒,animations block中的**對於是支援animation的**,才會有延時效果,對於不支援animation的** 則 不會有延時效果第二種:
[nsthread sleepfortimeinterval:3];//阻塞執行緒,浪費效能 ,一般不推薦用。此方式在主線程和子執行緒中均可執行。 建議放到子執行緒中,以免卡住介面,沒有找到取消執行的方法。
[self delaymethod];第三種:最常用dispatch_after(dispatch_time(dispatch_time_now, (int64_t)(3 * nsec_per_sec)), dispatch_get_main_queue(), ^);//定製了延時執行的任務,不會阻塞執行緒,在主線程和子執行緒中都可以,效率較高(推薦使用)。此方式在可以在引數中選擇執行的執行緒。 是一種非阻塞的執行方式, 沒有找到取消執行的方法。第四種:[self performselector:@selector(test) withobject:nil afterdelay:3];//此方式要求必須在主線程中執行,否則無效。 是一種非阻塞的執行方式.
[[self class] cancelpreviousperformrequestswithtarget:self];//取消本類中執行的performselector:方法第五種:定時器
1)nstimer
[nstimer scheduledtimerwithtimeinterval:3.0f target:self selector:@selector(delaymethod) userinfo:nil repeats:no];//此方式要求必須在主線程中執行,否則無效。 是一種非阻塞的執行方式, 可以通過nstimer類的- (void)invalidate;取消執行。2)dispatch_source_t(比 nstimer 更準的定時器),也可以在子執行緒中執行,非阻塞執行方式
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
self.timer = dispatch_source_create(dispatch_source_type_timer, 0, 0, queue);
//開始時間
dispatch_time_t start = dispatch_time(dispatch_time_now, 3.0 * nsec_per_sec);
//間隔時間
uint64_t interval = 2.0 * nsec_per_sec;
dispatch_source_set_timer(self.timer, start, interval, 0);
//設定**
dispatch_source_set_event_handler(self.timer, ^);
//啟動timer
dispatch_resume(self.timer);
iOS中延遲執行和取消的幾種方式
公用延遲執行的方法 void delaymethod 1 延遲執行 延遲執行 param aselector 方法名稱 param anargument 要傳遞的引數,如果無引數,就設為nil param delay 延遲的時間 void performselector sel aselector ...
OC中宣告變數的幾種方式
第一種 h檔案裡 inte ce test nsobject property copy nonatomic nsstring s m檔案裡 synthesize s s 第三種.h檔案裡 inte ce test nsobject property copy nonatomic nsstring ...
iOS 開發中方法延遲執行的幾種方式
公用延遲執行方法 void delaymethod self performselector selector delaymethod withobject nil 可傳任意型別引數 afterdelay 2.0 注 此方法是一種非阻塞的執行方式,未找到取消執行的方法。nstimer timer n...