PerformSelector
1.
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;
在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)。
默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。
参数:
aSelector:要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。
arg:要传递的参数,如果无参数,就设为nil
wait:要执行的aSelector方法,是否马上执行。
如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;
设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。
如果,当前线程就是主线程,那么aSelector方法会马上执行。
该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。
2.
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
在当前线程中执行指定的方法,使用默认模式,并指定延迟。
参数:
aSelector:指定的方法。含义同上,不在赘述。
anArgument:同上
delay:指定延迟时间(秒)。
3.
我们常常用到以下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);
}
其次,进行调用
//没有参数
BOOLisNoParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodNoParam)];
if(isNoParam) {
[self.selfViewControllerDelegateperformSelector:@selector(methodNoParam)];
}
//一个参数
BOOLisOneParam= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithOneParam:)];
if(isOneParam) {
[self.selfViewControllerDelegateperformSelector:@selector(methodWithOneParam:)withObject:@"firsht"];
}
//二个参数
BOOLisParams= [self.selfViewControllerDelegaterespondsToSelector:@selector(methodWithParams: andParamSecond:)];
if(isParams) {
[self.selfViewControllerDelegateperformSelector:@selector(methodWithParams: andParamSecond:)withObject:@"first"withObject:@"second"];
}