iOS 分线程与线程维活

NSThread(分线程):提高应用程序的运行效率

开辟多线程的要点:

1.同一时间,CPU只能处理一条线程,即同一时间只能执行一个程序顺序流;

2.多线程是并发(同时)执行任务,其实是CPU在不同线程间的快速切换;

3.线程过多会导致CPU调度频次提高,导致CPU资源大量消耗,使CPU大量损耗(一般不超过5条);

分线程:相互不影响,分开执行,独立存在的线程

注意:

1.不能在分线程中刷新UI控件;

2.在分线程中创建定时器只会执行循环一次,需打开该线程的runLoop才能循环执行;

开辟分线程的方式:1.NSThread;2.GCD(C语言方法);3.NSOperation(操作队列)

分线程生命周期:由线程代码决定

开辟线程NSThread方法:

创建分线程的方式一:

NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(threadRun) object:nil];

[thread start];

创建分线程的方式二:

[NSThread detachNewThreadSelector:@selector(threadRun) toTarget:self withObject:nil];

创建分线程的方式三:(隐式开辟)

[self performSelectorInBackground:@selector(threadRun) withObject:nil];

线程休眠:[NSThread sleepForTimeInterval:休眠时间];

回到主线程:[self performSelectorOnMainThread:主线程执行方法 withObject:nil waitUntilDone:YES];

线程退出:[NSThread exit];

线程标记:- (void)cancel 该方法标记当前线程的isCancel属性的状态并调用该属性

线程维活:

分线程由于是临时调用,在结束分配给它的任务后,就会进入休眠,再次使用,需要再次请求并开启新的线程,在实际开发中,往往会在分线程执行一些不定时的经常性任务,这样频繁开启分线程,就会损耗手机性能,这时候我们可以维持一个固定的分线程用来执行这一系列任务。

我们可以在分线程的方法中循环调用NSRunLoop以维持活性,NSRunLoop不消耗系统性能也不会占用线程

- (void)threadRun {

    while(YES) {

                [[NSRunLoop currentRunLoop]runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

            } 

}

当我们需要执行任务的时候可以用performSelector:onThread:withObject:waitUntilDone:方法来调用线程

[self performSelector:@selector(performEvent) onThread:thread withObject:nil waitUntilDone:NO];

- (void)performEvent {

//执行事件

}

你可能感兴趣的:(iOS 分线程与线程维活)