關於OC中的幾種延遲執行方式 菁欣

2022-09-24 02:42:09 字數 1512 閱讀 5691

第一種:

[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...