美文网首页
PerformSelector相关

PerformSelector相关

作者: wpf_register | 来源:发表于2020-05-27 10:03 被阅读0次
    PerfomSelector调用与直接调用区别
    1. performselector 是运行时系统负责找方法,在编译时不做任何校验,如果方法不存在,运行时程序才会崩溃;
      如果直接调用编译时会自动校验,如果方法不存在,在编译时就能够发现。

      Cocoa 支持友运行时向某个类添加方法,即方法编译时不存在,但运行时存在,这时必须使用PerformSelector调用。

    2. 直接调用方法时,一定要在头文件中声明该方法的使用,也要将头文件import进来,
      而使用PerformSelector时,不用import头文件 。

    3. PerfomSelector 是在iOS 中的一种方法调用方法,他可以向一个对象传递任何消息,而不需要在编译时声明这些方法,所以这也是runtime的一种应用方式。

    所以两者的区别就在Runtime,直接调用编译是自动校验,如果不存在,直接在编译时发现,编译器就会直接报错。
    但Performselector一定是运行时发现的,如果方法不存在就会崩溃。
    因此 respondsToSelector:在运行时判断对歇会儿是否响应此方法。

    线程相关
    /**
     在主线程上执行指定的方法,使用默认的模式(NSDefaultRunLoopMode)
     默认的模式指:主线程中的方法进行排队,是一个循环队列,并且循环执行。
    这个函数表示在主线程上执行方法,YES表示需要阻塞主线程,直到主线程将我们的代码块执行完毕。
    
     @param aSelector 要在主线程执行的方法,该方法不能有返回值,并且只能有一个参数。
     @param arg 要传递的参数,如果无参数,就设为nil。
     @param wait 要执行的aSelector方法,是否马上执行。
     如果设置为YES:等待当前线程执行完以后,主线程才会执行aSelector方法;
     设置为NO:不等待当前线程执行完,就在主线程上执行aSelector方法。
     如果,当前线程就是主线程,那么aSelector方法会马上执行。
     
     该方法用途:因为iPhone编程,对UI的修改,只能在主线程上执行。可以用该方法来完成UI的修改。
     */
    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait {
           NSLog(@"用的多");
    }
    
    - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array {
    
    }
    
    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait {
        
    }
    
    - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array {
    
    }
    
    /**
     在当前线程中执行指定的方法,使用默认模式,并指定延迟。
    
     @param aSelector 指定的方法。含义同上,不在赘述。
     @param anArgument 同上
     @param delay 指定延迟时间(秒)。
     */
    - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay {
          NSLog(@"用的多");
    }
    
    - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray<NSRunLoopMode> *)modes {
    
    }
    

    相关文章

      网友评论

          本文标题:PerformSelector相关

          本文链接:https://www.haomeiwen.com/subject/luiiahtx.html