RunLoop常駐線程

62cdfbda95d3cb31b132ba83adb028848926625cbf28-FIdW4E_fw658.jpeg

在開發(fā)中,經常遇到的便是開啟一個線程,當線程的任務完成,該線程便會被自動收回。
但是如果我們需要一個線程一直存在,等待執(zhí)行某個任務該怎么辦呢?
我們可以使用RunLoop來實現
首先:
1. 線程的聲明周期與任務有關,任務完成之后,他就會被系統自動銷毀,以節(jié)省開支。
2.RunLoop用于控制NSRunLoop里面線程的執(zhí)行和休眠,在有事情做的時候使當前NSRunLoop控制的線程工作,沒有事情做讓當前NSRunLoop的控制的線程休眠。
3.每個RunLoop都有一個mode ,model中有timer/source/observer/, 只要這個mode存在,RunLoop 就不會退出

代碼實現

@interface ViewController ()
@property (strong, nonatomic)   NSThread            *subThread;  
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
//創(chuàng)建一個子線程
    NSThread *subThread = [[NSThread alloc] initWithTarget:self selector:@selector(subThread) object:nil];
//開啟線程
    [subThread start];
    self.subThread = subThread;

 }
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//當點擊的時候在指定的線程上執(zhí)行一個任務
    [self performSelector:@selector(threadAction) onThread:self.subThread withObject:nil waitUntilDone:NO];
}
//綁定線程事件
- (void) subThread
{
    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
    [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
    [runLoop run];//加入當前的RunLoop
}
- (void)threadAction
{
      [NSThread sleepForTimeInterval:3.0];
}
@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容