博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS--多线程
阅读量:6238 次
发布时间:2019-06-22

本文共 2652 字,大约阅读时间需要 8 分钟。

- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    // iOS下的多线程    // 1. 进程和线程    // 什么是进程? 进程是当用户下达执行应用程序的命令时, 所启动的东西.    // 什么是线程? 线程是进程的执行单位, 线程比作工人, 进程比作工厂    // 2. 多线程    // 为了更好的进行一些程序的操作, 节省时间, 提高效率.    // 一个进程不能过多的创建线程, 资源消耗过大.(工厂不能有太多的工人, 工资发不起) 合理的是:开辟5个左右的线程    // 注意: 所有 UI 的操作都放在主线程中进行    // 需要开辟线程的耗时操作: 图像文字渲染, 大数据存储, 网络请求等.        // 3. NSThread    // 1> currentThread 获取当前线程    //    
{number = 1, name = main} // name: 线程名 number: 线程编号 // main 代表主线程 NSThread *thread = [NSThread currentThread]; // 2> 开辟一个子线程执行操作 // 子线程随机创建 [NSThread detachNewThreadSelector:@selector(newThread) toTarget:self withObject:nil]; // 3> 延迟当前线程的执行, 固定日期 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10]; // [NSThread sleepUntilDate:date]; NSLog(@"1111"); // 4> 延迟当前线程的执行, 相对时间 [NSThread sleepForTimeInterval:1]; NSLog(@"1111"); // 5> 退出当前线程, 不要退出主线程 // 退出后, 线程后续操作不会再执行 // [NSThread exit]; NSLog(@"%@", [NSThread mainThread]); // 6> threadPriority 线程优先级 // 默认优先级是 0.5 double priority = [NSThread threadPriority]; NSLog(@"%lf", priority); // 7> name 线程名 [NSThread mainThread].name = @"马峰的主线程"; NSLog(@"%@", thread); // 8> isMainThread 判断是否是主线程 // 判断当前线程 [NSThread isMainThread]; // 判断线程对象是不是主线程 [[NSThread mainThread] isMainThread]; // 9> 初始化方法 需要手动管理线程的生命周期 // 初始化一个未启动的线程 // NSThread *newThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThread) object:nil]; // [newThread start]; // _imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://bizhi.zhuoku.com/2016/08/02/bing/bing06.jpg"]]]; // 10> 将耗时的操作放到后台, 不关心线程问题 [self performSelectorInBackground:@selector(myThread) withObject:nil]; // 11> performSelectorOnMainThread 返回主线程执行操作 }- (void)myThread { NSLog(@"%s", __FUNCTION__); NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://pic1.win4000.com/wallpaper/8/511ce1c9ee276.jpg"]]; // 返回主线程显示图片 [self performSelectorOnMainThread:@selector(onMainThreadHandleImage:) withObject:data waitUntilDone:YES];}- (void)onMainThreadHandleImage:(id)object { _imageView.image = [UIImage imageWithData:object];}- (void)newThread { NSThread *thread = [NSThread currentThread]; thread.name = @"xxx 的线程"; double priority = [NSThread threadPriority]; NSLog(@"%lf", priority); NSLog(@"%@", thread); }- (IBAction)click:(id)sender { for (int i = 0; i < 100000000; i++) { NSLog(@"循环了%d", i); } }

 

转载地址:http://zpzia.baihongyu.com/

你可能感兴趣的文章
如何使用视频剪辑软件将qsv格式视频转换为MP4格式
查看>>
MySQL基础部分总结
查看>>
融云开发漫谈:你是否了解Go语言并发编程的第一要义?
查看>>
android新闻项目、饮食助手、下拉刷新、自定义View进度条、ReactNative阅读器等源码...
查看>>
spring-boot下使用LogBack,使用HTTP协议将日志推送到日志服务器
查看>>
不要再问我移动适配的问题了
查看>>
vue-router源码解析(一)
查看>>
利用命令行工具pdftk对PDF进行合并分割
查看>>
04.JavaIO流问题
查看>>
CORS 理解(不要那么多术语)
查看>>
[LeetCode] 767. Reorganize String
查看>>
JS面向对象的程序设计之继承的实现-寄生组合式继承
查看>>
前端--iframe爬坑记录
查看>>
【实践】视频播放成功率下降很多?可能是你密钥管理的方式不对!
查看>>
设计类六大原则
查看>>
Python: kafka-python版本差异导致的问题
查看>>
通过NPD在kubernetes集群上增强节点的错误检测能力
查看>>
Drools 文档(KIE概述)
查看>>
Python进程专题2:multiprocessing创建进程
查看>>
聊聊rocketmq的NettyEncoder及NettyDecoder
查看>>