#import "ViewController.h"
@interface ViewController ()
{
NSThread *thread;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//创建线程
thread = [[NSThread alloc] initWithTarget:self selector:@selector(threadAction) object:nil];
//设置名字
thread.name = @"hehe";
//启动线程
[thread start];
}
//线程的入口方法
/*完善线程入口方法的三点
1.创建自动释放池 释放开辟的内存
2.设置runloop
3.停止runloop,终止线程
*/
-(void)threadAction
{
//1.创建自动释放池 释放开辟的内存
@autoreleasepool {
//延时调用
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// [NSThread exit];
// });
//使当前线程任务持续执行 两种方式
//第一种方式while循序
// while (1) {
// NSLog(@"123...");
// }
//第二种:开启runloop 子线程中runloop默认是关闭的,开启runloop必须要有事件源
//创建timer定时器
NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timer) userInfo:nil repeats:YES];
//将timer添加到runloop中
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
//2.开启runloop 使用run的方式 无法停止runloop
// [[NSRunLoop currentRunLoop] run];
//开启runloop 运行到某个时间点停止runloop 并且带有运行模式
// [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:5]];
//开启runloop 运行到某个时间点停止
// [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];
//3.终止runloop的方式
// [[[NSThread currentThread] threadDictionary] setValue:@(NO) forKey:@"isExit"];
//获取线程字典属性 目的:记录当前前程是否退出的状态
NSMutableDictionary *threadDictionary =[[NSThread currentThread] threadDictionary];
BOOL exit = NO;
[threadDictionary setValue:@(exit) forKey:@"isExit"];
//while循环判断 根据线程中字典属性判断
while (!exit) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];
exit = [[threadDictionary objectForKey:@"isExit"] boolValue];
}
}
}
-(void)timer
{
NSLog(@"hehe");
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//触摸屏幕时停止线程任务
[thread.threadDictionary setValue:@(YES) forKey:@"isExit"];
}
@end
多线程 线程入口完善方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、线程的概述 进程:正在运行的程序,负责了这个程序的内存空间分配,代表了内存中的执行区域。线程:就是在一个进程中...
- 1、好处: 1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载 2、发挥多核处理器的优势,...