什么时候使用runloop 以及 performSelector 具体使用方法

原创 2015年11月20日 15:38:57

runloop就不介绍了,度娘都告诉大家了,这里简单说一下什么时间点才使用runloop

首先run loop不需要创建,在线程中只需要调用[NSRunLoop currentRunLoop]就可以得到

如果你:

1. 使用port或是自定义的input source来和其他线程进行通信
2. 在线程(非主线程)中使用timer
3. 使用 performSelector…系列(如performSelectorOnThread, …)
4. 使用线程执行周期性工作

这些时候可以调用runloop

Run loop 是程序主线程基础设施的关键部分。所以,Cocoa 和 Carbon 程序提供了代码运行主程序的循环并自动启动 run loop。如果你使用 xcode 提供的模板创建你的程序,那你永远不需要自己去显 式的调用这些例程。

对于辅助线程,你需要判断一个 run loop 是否是必须的。如果是必须的,那么 你要自己配置并启动它。你不需要在任何情况下都去启动一个线程的 run loop。
 

performSelector这个方法对于初学者可能比较陌生,但是迟早你会遇到这个牛逼的方法,下面说一下关于performSelector都有哪些方法:

1、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

aSelector:方法名称

arg:参数(该方法有且只有一个参数,无参数可设为nil)

wait:BOOL值 当前线程若为主线程,aSelector立即执行;

当前若为分线程:YES:等待当前线程执行完毕,主线程执行aSelector;NO:aSelector立刻执行;


2、- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay


aSelector:方法名称

arg:参数(该方法有且只有一个参数,无参数可设为nil)

delay:aSelector方法延迟执行,单位(s)

注:以上在主线程上执行aSelector方法时,默认使用NSDefaultRunLoopMode模式;


3、performSelector可以访问未声明的方法

- (id)performSelector:(SEL)aSelector;

- (id)performSelector:(SEL)aSelector withObject:(id)object;

- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

 
例:


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

    Person *person = [[Personalloc] init];

    [person performSelector:@selector(eat)];


}

@end


Person.h

@interface Person : NSObject

@end


Person.m

@implementation Person

void eat (idself, SEL sel)

{

    NSLog(@"吃饭了");

}

@end

另两个方法就不赘述了,方法类似。


@end
@end
@end
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

ajax与jq什么时候使用

  • 2017年10月19日 14:57
  • 838B
  • 下载

(20)static用法、特点、与非静态的区别、使用注意事项、利弊、什么时候用、对主函数的理解、对已封装好的类方法调用的理解

一、用法        是一个修饰符,用于修饰成员(成员变量和成员函数)        当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员 二、静...

dl,dt,dd在什么时候适合使用呢

  • 2012年05月30日 15:38
  • 353B
  • 下载

什么时候使用类方法呢?(静态方法何时使用)

静态方法何时使用 如果某些操作不依赖具体实例,那它就是静态的,反之如果某些操作是依赖具体实例的(例如访问一个特定会员的名称),那它就应该是实例化的。静态方法不用new对象可以直接调用 1....

runloop 与autorelase对象、Autorelease Pool 在什么时候释放

转载自:http://blog.csdn.net/leikezhu1981/article/details/51246684iOS的运行时是由一个一个runloop组成的,每个runloop都会执行下...
  • wxs0124
  • wxs0124
  • 2016年12月04日 11:20
  • 282

无线路由器具体使用方法

  • 2011年07月29日 22:03
  • 31KB
  • 下载

C#类控件的具体使用方法

  • 2008年10月30日 08:27
  • 30KB
  • 下载

高级编程中消息队列的具体使用方法

键 每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符加以引用,为了对一个消息队列发送或取消息,只需要知道其队列标识符。 键是在用户空间的,标识符是在内核空间的,一个标识符...

NC瑞士军刀的具体使用方法

nc的使用方法 netcat被誉为网络安全界的‘瑞士军刀’,相信没有什么人不认识它吧...... 一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么时候使用runloop 以及 performSelector 具体使用方法
举报原因:
原因补充:

(最多只允许输入30个字)