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是一种消息处理机制!

相关文章
相关标签/搜索