【第22期】观点:IT 行业加班,到底有没有价值?

什么时候使用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
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

iOS,面试必看,最全梳理

序言目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了。今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平...

iOS多线程编程Part 1/3 - NSThread & Run Loop

http://www.hrchen.com/2013/06/multi-threading-programming-of-ios-part-1/   <h1 class="title" style="margin-bottom: 20px; font-size:

iOS 多线程:NSThread和runloop

如果对线程了解不够清楚,在项目就使用线程,会给开发带来很多问题。所以在iphone的项目中使用线程,最好先学习Apple的线程开发向导。以下是自己开发过程中,使用线程遇到的问题,以及解决的方法。 ...

autorelease对象具体什么时候释放?

在项目中,会有一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release, 这样跟内存泄露有什么区别? 答案是,对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。 那什么是一个Runloop呢? 一个UI

tiles的具体使用方法

组成部分: 1.<span style='font-weight: normal; font-s
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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