performSelector的方法


在此我對performSelector系列方法進行了總結

1、

- (id)performSelector:(SEL)aSelector;

- (id)performSelector:(SEL)aSelector withObject:(id)object;

- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

這三個方法都是同步執行,與線程無關,在需要動態的去調用方法的時候去使用。

例如:

[self performSelector:@selector(configUI)]; 與[self configUI]; 效果完全相同。

withObject:(id)object 這是要傳遞的參數

2、

- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray<NSString *> *)modes;

- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

  這兩個方法為異步執行,只能在主線程中執行。可用於點擊UI中一個按鈕會觸發一個消耗性能的事件,在事件執行期間按鈕會一直處於高亮狀態,此時可以調用該方法去異步的處理該事件,避免上述問題。

在方法未到執行時間之前,取消方法為:

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

調用該方法之前或在該方法所在的viewController生命周期結束的時候去調用取消函數,以確保不會引起內存泄露。

3、

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array;

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;

這兩個方法,在主線程和子線程中均可執行,均會調用主線程的aSelector方法

如果設置wait為YES:等待當前線程執行完以后,主線程才會執行aSelector方法;

設置為NO:不等待當前線程執行完,就在主線程上執行aSelector方法。

如果,當前線程就是主線程,那么aSelector方法會馬上執行。

注意:apple不允許程序員在主線程以外的線程中對ui進行操作,此時我們必須調用performSelectorOnMainThread函數在主線程中完成UI的更新

4、 

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array NS_AVAILABLE(10_5, 2_0);

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait NS_AVAILABLE(10_5, 2_0);

在我們指定的線程中調用方法。

5、

- (void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg NS_AVAILABLE(10_5, 2_0);

后台執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM