浅谈多线程——NSThread

  上一篇文章中我们大致了解了GCD的模式和方法,在iOS开发中除了GCD之外,还有NSThread和NSOperation两种多线程方式。

  1.NSThread

  - a - 使用NSThread开辟多线程进行子任务处理:类方法和初始化方法

  使用类方法不需要创建对象就可以直接开辟多线程并发;而创建NSThread对象进行开辟则需要使用 - (void)start 方法进行线程启动。

 1 #import "ViewController.h"
 2 
 3 typedef NS_ENUM(NSInteger, ENSThreadType) {
 4     kNSThreadClassFunc,
 5     kNSThreadInitFunc,
 6 };
 7 
 8 @interface ViewController ()
 9 
10 @end
11 
12 @implementation ViewController
13 
14 - (void)viewDidLoad {
15     [super viewDidLoad];
16     
17     [self threadWithType:kNSThreadInitFunc times:10];
18     
19 }
20 
21 - (void)threadWithType:(ENSThreadType)type times:(int)time{
22     for(int i = 0; i < time; i++){
23         NSString *str = [NSString stringWithFormat:@"测试+%d", i];
24         
25         switch (type) {
26             case kNSThreadClassFunc:{
27                 // ①类方法
28                 [NSThread detachNewThreadSelector:@selector(func:) toTarget:self withObject:str];
29             }
30                 break;
31             case kNSThreadInitFunc:{
32                 // ②初始化方法
33                 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(func:) object:str];
34                 thread.name = str;
35                 [thread start];
36             }
37                 break;
38             default:
39                 break;
40         }
41         
42     }
43 }
44 
45 - (void)func:(NSString*)str{
46     NSLog(@"%@ %@", str, [NSThread currentThread]);
47 }
48 
49 @end

  

  - b - NSThread实例方法,创建了NSThread对象后,可以调用它的实例方法:

 1 #import "ViewController.h"
 2 
 3 typedef NS_ENUM(NSInteger, ENSThreadObjFunc) {
 4     // kThreadObjFuncThread,
 5     kThreadObjFuncMain,
 6     kThreadObjFuncBackground,
 7 };
 8 
 9 @interface ViewController ()
10 {
11     NSThread *aThread;
12 }
13 @end
14 
15 @implementation ViewController
16 
17 - (void)viewDidLoad {
18     [super viewDidLoad];
19     
20     aThread = [[NSThread alloc] initWithTarget:self selector:@selector(func:) object:@"测试参考线程"];
21     [aThread start];
22     
23     [self threadObjFuncWithType:kThreadObjFuncMain thread:aThread times:10];
24     
25 }
26 
27 - (void)func:(NSString*)str{
28     NSLog(@"%@ %@", str, [NSThread currentThread]);
29 }
30 
31 - (void)threadObjFuncWithType:(ENSThreadObjFunc)type thread:(NSThread*)thread times:(int)time{
32     
33     for(int i = 0; i < time; i ++){
34         switch (type) {
35             case kThreadObjFuncMain:{
36                 // ①主线程队列中执行,同步
37                 NSString *str = [NSString stringWithFormat:@"主线程队列+%d", i];
38                 [self performSelectorOnMainThread:@selector(func:) withObject:str waitUntilDone:YES];
39             }
40                 break;
41             case kThreadObjFuncBackground:{
42                 // ②后台执行,并行异步
43                 NSString *str = [NSString stringWithFormat:@"后台执行+%d", i];
44                 [self performSelectorInBackground:@selector(func:) withObject:str];
45             }
46                 break;
47             // case kThreadObjFuncThread:{
48                 // ③在某一线程队列执行,类似于串行异步
49                 // NSString *str = [NSString stringWithFormat:@"方法+%d", i];
50                 // [self performSelector:@selector(func:) onThread:thread withObject:str waitUntilDone:YES];
51             // }
52                 // break;
53             default:
54                 break;
55         }
56     }
57 }
58 
59 @end

 

转载于:https://www.cnblogs.com/kriskee/p/5368155.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年程序员可以做哪些副业?

哈喽&#xff0c;大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享程序员搞副业的一期节目&#xff0c;欢迎大家一起学习。 1.程序员为什么要做副业&#xff1f; 副业意味着自由 时至今日&#xff0c;仍然有一大群程序员还天真地认为从事副业是一种压迫。但事实是&…

学习Apache Camel –实时索引推文

在大多数软件开发项目中&#xff0c;有一点需要使应用程序开始与其他应用程序或第三方组件通信。 无论是发送电子邮件通知&#xff0c;调用外部api&#xff0c;写入文件还是将数据从一个地方迁移到另一个地方&#xff0c;您都可以推出自己的解决方案或利用现有框架。 对于Jav…

【坑】执行Consumer的时候发生java.net.UnknownHostException错误

【时间】&#xff1a; 2016/4/8 17:30 【问题】&#xff1a; kafka执行Consumer实例的时候&#xff0c;发生了一下错误。 kafka配置文件server.properties如下&#xff1a; zookeeper配置文件zoo.cfg内容如下&#xff1a; consumer的实现代码如下&#xff1a; 其中静态类的定义…

如何上架自己的应用到各大应用商店?

大家好&#xff0c;我叫孙叫兽&#xff0c;本期给大家分享的内容是如何上架自己的应用到应用商店&#xff0c;感谢大家的阅读&#xff01;1.上架各大应用商店需要准备哪些材料&#xff1f;上架各大安卓应用商店&#xff08;腾讯应用宝、阿里应用商店、百度手机助手、华为应用市…

时间复杂度和空间复杂度[数据结构]

參考&#xff1a;本文为小甲鱼教学视频的学习笔记。 1、为什么要学习时间复杂度和空间复杂度&#xff1f;你说一个算法好另外一个算法不好&#xff0c;有什么推断根据&#xff1f;哪个算法效率高&#xff1f;怎么推断&#xff1f;那么就要学习时间和空间复杂度了。思考&#xf…

js编码解码decodeURI()与decodeURIComponent()的区别

区别&#xff1a; encodeURIComponent()对/?:&$,#进行编码&#xff0c;encodeURI()不会 如果url的query和path传参中含有这些字符会被不正确的截断&#xff0c;拿到的参数会是错误的&#xff0c;一般都会用encodeURIComponent()进行编码、decodeURIComponent进行解码 en…

gitlab将分支代码合并到master上

1、首先在test分支上进行git add .git commit -m "test"git push 2、切换到master上git checkout mastergit merge test git push

堆栈跟踪 堆栈跟踪_过滤日志中无关的堆栈跟踪行

堆栈跟踪 堆栈跟踪我喜欢堆栈痕迹。 不是因为我喜欢错误&#xff0c;而是因为发生错误的那一刻&#xff0c;堆栈跟踪是无价的信息源。 例如&#xff0c;在Web应用程序中&#xff0c;堆栈跟踪向您显示完整的请求处理路径&#xff0c;从HTTP套接字到过滤器&#xff0c;Servlet&am…

VUE使用vue-seamless-scroll自动滚动表格数据,对表格数据排序无效的解决办法

使用vue-seamless-scroll循环表格数据&#xff0c;建议使用v-for,ul li 的形式便于操作属性&#xff0c;elemengt ui table可能不好处理兼容性问题及属性设置&#xff0c;尤其是一个页面添加多个表格及效果。 VUE : 排序 this.$refs.seamlessScroll.reset() 效果图

前端常见的加密算法介绍

一、前言 在信息安全越来越受重视的今天&#xff0c;前端的各种加密也变得更加重要。通常跟服务器的交互中&#xff0c;为保障数据传输的安全性&#xff0c;避免被人抓包篡改数据&#xff0c;除了 https 的应用&#xff0c;还需要对传输数据进行加解密。 目前常见的加密算法可…

一时冲动:“通往瓦尔哈拉之路的冒险”

通过所有有关Java 9和Project Jigsaw的讨论&#xff0c;我们不应忽视Java的另一重大变化。 希望在第10版或第11版中&#xff0c; Valhalla项目能够实现并介绍价值类型和专业化。 那么这是怎么回事&#xff0c;项目进展如何&#xff0c;面临什么挑战&#xff1f; 几天前&#x…

小程序分包

一、小程序分包 微信文档写的够清楚了 使用分包 | 微信开放文档 &#xff08;1&#xff09;常规分包注意点&#xff1a; 每个分包只能引用主包和自己的资源 &#xff08;2) 独立分包注意点&#xff1a;特别麻烦 懒得用了吧 独立分包中不能依赖主包和其他分包中的内容 …

解决Sublime Text3莫名的中文乱码问题

有好几回用Sublime Text3写着中英混杂的文字的时候&#xff0c;会突然就弹出警告说什么编码不行&#xff0c;然后点击确定后&#xff0c;原来的中文全都乱码了&#xff1a; 然后即使按ctrlz撤回也没用&#xff0c;重新打开也没用&#xff0c;用记事本的转换ansi、unicode等方式…

try catch finally的用法

1、不使用try...catch出现异常后&#xff0c;后面的代码都不会运行了 login() {console.log(b);console.log(hhhhhhhh);}, 2、使用了try...catch出现异常后&#xff0c;try...catch后的代码还会继续运行 login() {try{console.log(b);}catch (e){console.log(e);}console.log…

网站优化第一次网页加载的速度的办法与思路。

网站重新开发了一次&#xff0c;第一次部署到测试网络&#xff0c;访问速度很慢&#xff0c;差不多第一次加载得需要40秒&#xff0c;太慢了&#xff0c;这里简单总结一下。 当然&#xff0c;还有一些无用的.MAP文件都可以删除&#xff0c;图片可以在线压缩一下&#xff0c;代码…

我的Serverless实战——大前端趋势之Serverless从入门到天黑

导读&#xff1a;大厂都在做Serverless&#xff0c;他到底是什么东东呢&#xff1f;可能很多人都没有听说过&#xff0c;听说这个是大前端的一个趋势&#xff0c;最近两年比较火&#xff0c;如果你还没有听说过&#xff0c;那你就需要注意啦。今天孙叫兽带大家了解一下Serverle…

element ui upload上传文件成功后,清除默认的列表。

问题描述&#xff1a;每次提交之后&#xff0c;这个上传按钮会有默认的列表&#xff0c;其实刷新这个默认列表就没了。 清除标记位置的办法&#xff1a; 清除列表&#xff1a;&#xff08;上传成功后&#xff0c;清空列表&#xff09; 效果图&#xff1a;

处理网络请求qs、图片转base64的优劣

一、引入qs这个库&#xff0c;更好的处理网络请求传参。 qs.parse let url http://item.taobao.com/item.htm?a1&b2&c&dxxx&e; let data qs.parse(url.split(?)[1]);// data的结果是 {a: 1, b: 2, c: , d: xxx, e: }qs.stringify 二、图片文件转为base6…

花了一天的时间给粉丝做了一个小米官网(高仿)

身为前端程序员&#xff0c;经常会找几个官网试试手&#xff0c;哈哈&#xff0c;这次拿小米官网试试手吧。 目录 效果图&#xff1a; 项目结构 index.html index.css js 下载地址&#xff1a;点我下载 效果图&#xff1a; 项目结构 index.html <!DOCTYPE html> &l…

uniapp踩坑指南之坑多到写不完

1、sticky:到达指定位置时&#xff0c;就停留在那里不动了。当发现可以走时&#xff0c;立马就走了。 如果走不了就不会动了&#xff0c;就会一直在那里。 https://www.cnblogs.com/byeyear/p/11999334.html 设置了sticky定位的元素相对于第一个定位不为static的父级元素的位置…