Runloop中自动释放池的创建和释放
第一次创建:启动runloop
最后一次销毁:runloop退出的时候
其他时候的创建和销毁:当runloop即将睡眠的时候销毁之前的释放池,重新创建一个新的
runloop在开发中的应用场景:
最长使用的就是开一个常驻线程 (让一个子线程不进入消亡状态,等待其他线程发来详细,处理其他时间)
在子线程中开启一个定时器
在子线程中进行长期监控
可以控制定时器在特定模式下执行
可以让某些事件(行为,任务)在特定模式下执行
可以添加Observer监听runloop的状态,比如监听点击事件(在所有点击事件之前做一些事情)
总所周知,一条子线程随着任务的执行完毕就会挂掉,那么如何保证子线程不挂掉呢?
解决方法:开runloop
以下下是示例代码
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)NSThread *thread;
@end
@implementation ViewController
- (IBAction)creatBtn:(id)sender {
self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(task) object:nil];
[self.thread start];
}
- (IBAction)goonBtn:(id)sender {
//想让上面开的线程执行完毕后继续工作,需要做一个线程间的通信
[self performSelector:@selector(task2) onThread:self.thread withObject:nil waitUntilDone:YES];
}
-(void)task
{
NSRunLoop *runloop=[NSRunLoop currentRunLoop];
//为了保证runloop不退出
// NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
//
// [runloop addTimer:timer forMode:NSDefaultRunLoopMode];
NSLog(@"%s",__func__);
[runloop addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
[runloop run];
}
-(void)task2
{
NSLog(@"task2-----%@",[NSThread currentThread]);
}
-(void)run
{
NSLog(@"%s",__func__);
}
//
@end