iOS - performSelector方法的使用

一。舉例說明 編程

 [self performSelectorOnMainThread:@selector(RefreshCellForLiveId:) 多線程

 withObject:userinfo 函數

 waitUntilDone:YES]; oop

 

 該方法的做用是在主線程中,執行制定的方法(代碼塊)。 spa

 參數: 線程

 @selector(RefreshCellForLiveId:)就是,要定義咱們要執行的方法。 orm

 withObject:userinfo 對象

 定義了,咱們執行RefreshCellForLiveId:方法時,傳入的參數對象。類型是id。(咱們能夠傳入任何參數) 隊列

 waitUntilDone:YES]; 事件

 指定,當前線程是否要被阻塞,直到主線程將咱們制定的代碼塊(RefreshCellForLiveId:方法)執行完。

 

 注意:

 1.當前線程爲主線程的時候,waitUntilDone:YES參數無效。

 2.該方法,沒有返回值

 3.該方法主要用來用主線程來修改頁面UI的狀態。

二。詳細說明

在項目中,經常用到performSelectorXXX之類的方法,並且有不少相似方法;今天就來召集一下!

 1.performSelectorOnMainThread:withObject:waitUntilDone:

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

 

 在主線程上執行指定的方法,使用默認的模式(NSDefaultRunLoopMode)。

 默認的模式指:主線程中的方法進行排隊,是一個循環隊列,而且循環執行。

 參數:

 aSelector:要在主線程執行的方法,該方法不能有返回值,而且只能有一個參數。

 

 arg:要傳遞的參數,若是無參數,就設爲nil

 

 wait:要執行的aSelector方法,是否立刻執行。

 若是設置爲YES:等待當前線程執行完之後,主線程纔會執行aSelector方法;

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

 若是,當前線程就是主線程,那麼aSelector方法會立刻執行。

 

 該方法用途:由於iPhone編程,對UI的修改,只能在主線程上執行。能夠用該方法來完成UI的修改。

 

 

 2.performSelector:withObject:afterDelay:

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

 

 在當前線程中執行指定的方法,使用默認模式,並指定延遲。

 參數:

 aSelector:指定的方法。含義同上,不在贅述。

 anArgument:同上

 delay:指定延遲時間(秒)。

 

 3.performSelector

 

 咱們經常用到如下3個方法,分別爲:

 

 

 - (id)performSelector:(SEL)aSelector;

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

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

這三個方法相同點都有一個要執行的方法,不一樣之處在於參數個數不一樣,參數個數分別爲0,1,2。

通常會先使用respondsToSelector方法判斷是否能響應該某方法,能得話經過上面三個方法中的一個調用執行方法。

 補充:

 Run loop 至關於 win32 裏面的消息循環機制,它可讓你根據事件/消息(鼠標消息,鍵盤消息,觸摸事件,計時器消息等)來調度線程。

 好比:在觸摸 UIView 時之因此可以激發 touchesBegan/touchesMoved 等等函數被調用。系統會自動爲應用程序的主線程生成一個與之對應的 run loop 來處理其消息循環。讓調用更加簡單。也避免了繁瑣,複雜的操做。

 

 一句話:Run loop是一種消息處理機制!

三。後臺前臺的問題。

 NSObject類的performSelectorOnMainThread和performSelectorInBackground能夠實現簡單的多線程編程技術

 

 一、- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

 

 建立一個線程在子線程執行,aSelector表明了新建立的線程,arg是傳入的參數

 

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

 

 該方法的做用是在主線程中,執行制定的方法(代碼塊)。

 

 參數:

 

 @selector就是,要定義咱們要執行的方法。

 

 withObject:arg定義了,咱們執行方法時,傳入的參數對象。類型是id。(咱們能夠傳入任何參數)

 

 waitUntilDone:YES指定,當前線程是否要被阻塞,直到主線程將咱們制定的代碼塊執行完。

 

 注意:

 

 1.當前線程爲主線程的時候,waitUntilDone:YES參數無效。

 

 2.該方法,沒有返回值

 

 3.該方法主要用來用主線程來修改頁面UI的狀態。

相關文章
相關標籤/搜索