performSelector 的經常使用方法

performSelector 的經常使用方法

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

1.performSelectorOnMainThread:withObject:waitUntilDone:編程

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

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

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

參數:線程

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

 

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

 

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

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

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

若是,當前線程就是主線程,那麼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;

首先,定義要調用的方法

- (void)methodNoParam{

    NSLog(@"methodNoParam");

}

- (void)methodWithOneParam:(id)paramFirst{

    NSLog(@"methodWithOneParam: %@", paramFirst);

    

}

- (void)methodWithParams:(id)paramFirst andParamSecond:(id) paramSecond{

     NSLog(@"methodWithOneParam: %@,%@", paramFirst,paramSecond);

}

 

其次,進行調用

 

// 沒參

    BOOL isNoParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodNoParam)];

    if (isNoParam) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodNoParam)];

    }

    

    // 一參

    BOOL isOneParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithOneParam:)];

    if (isOneParam) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodWithOneParam:) withObject:@"firsht"];

    }

    

    // 二參

    BOOL isParams= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithParams: andParamSecond:)];

    if (isParams) {

        [self.selfViewControllerDelegateperformSelector:@selector(methodWithParams: andParamSecond:) withObject:@"first"withObject:@"second"];

    }

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

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

能夠理解爲 Run loop是一種消息處理機制!

相關文章
相關標籤/搜索