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是一種消息處理機制!