iOS开发多线程篇—创建线程

简介: iOS开发多线程篇—创建线程 一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) o...

iOS开发多线程篇—创建线程

一、创建和启动线程简单说明

一个NSThread对象就代表一条线程

创建、启动线程

(1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

[thread start];

// 线程一启动,就会在线程thread中执行self的run方法

 

主线程相关用法

+ (NSThread *)mainThread; // 获得主线程

- (BOOL)isMainThread; // 是否为主线程

+ (BOOL)isMainThread; // 是否为主线程

 

其他用法

获得当前线程

NSThread *current = [NSThread currentThread];

 

线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高

+ (double)threadPriority;

+ (BOOL)setThreadPriority:(double)p;

 

设置线程的名字

- (void)setName:(NSString *)n;

- (NSString *)name;

 

其他创建线程的方式

(2)创建线程后自动启动线程   [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

(3)隐式创建并启动线程  [self performSelectorInBackground:@selector(run) withObject:nil];

上述2种创建线程方式的优缺点

优点:简单快捷

缺点:无法对线程进行更详细的设置

二、代码示例

1.使用古老的方式创建

 1 //
 2 //  YYViewController.m
 3 //
 4 //
 5 //  Created by apple on 14-6-23.
 6 //  Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8 
 9 
10 #import "YYViewController.h"
11 #import <pthread.h>
12 
13 
14 @interface YYViewController ()
15 - (IBAction)btnClick;
16 @end
17  
18 
19 @implementation YYViewController
20  
21 
22 - (void)viewDidLoad
23 {
24     [super viewDidLoad];
25 }
26 
27  
28 //按钮的点击事件
29 - (IBAction)btnClick {
30     //1.获取当前线程
31     NSThread *current=[NSThread currentThread];
32     //主线程
33     NSLog(@"btnClick----%@",current);   
34 
35     //2.使用for循环执行一些耗时操作
36    pthread_t thread;
37     pthread_create(&thread, NULL, run, NULL);
38 }
39 
40 
41 //c语言函数
42 void *run(void *data)
43 {
44     //获取当前线程,是新创建出来的线程
45     NSThread *current=[NSThread currentThread];
46 
47 
48     for (int i=0; i<10000; i++) {
49         NSLog(@"btnClick---%d---%@",i,current);
50     }
51     return NULL;
52 }
53 
54 //多个线程,点击按钮执行按钮调用方法的时候,主线程没有被阻塞
55 
56 @end
57 
58  

实现效果:

 

打印结果:

2.使用NSThread创建线程

  1 //
  2 //  YYViewController.m
  3 //
  4 //
  5 //  Created by apple on 14-6-23.
  6 //  Copyright (c) 2014年 itcase. All rights reserved.
  7 //
  8 
  9 #import "YYViewController.h"
 10 #import <pthread.h>
 11 
 12 
 13 @interface YYViewController ()
 14 - (IBAction)btnClick;
 15 @end
 16 
 17 
 18 @implementation YYViewController 
 19 
 20 - (void)viewDidLoad
 21 {
 22     [super viewDidLoad];
 23 }
 24 
 25 
 26 //按钮的点击事件
 27 - (IBAction)btnClick {
 28     //1.获取当前线程
 29     NSThread *current=[NSThread currentThread];
 30     //主线程
 31     NSLog(@"btnClick----%@",current);
 32 
 33     //获取主线程的另外一种方式
 34    NSThread *main=[NSThread mainThread];
 35     NSLog(@"主线程-------%@",main);
 36 
 37     //2.执行一些耗时操作
 38     [self creatNSThread];
 39 //    [self creatNSThread2];
 40 //    [self creatNSThread3];
 41 }
 42 
 43  
 44 /**
 45  * NSThread创建线程方式1
 46  * 1> 先创建初始化线程
 47  * 2> start开启线程
 48  */
 49 -(void)creatNSThread
 50 {
 51     NSThread  *thread=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程A"];
 52     //为线程设置一个名称
 53     thread.name=@"线程A";
 54      //开启线程
 55     [thread start];
 56   
 57 
 58     NSThread  *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(run:) object:@"线程B"];
 59     //为线程设置一个名称
 60     thread2.name=@"线程B";
 61    //开启线程
 62     [thread2 start];
 63 }
 64 
 65  
 66 /**
 67  * NSThread创建线程方式2
 68 *创建完线程直接(自动)启动
 69  */
 70 
 71 -(void)creatNSThread2
 72 {
 73 //    NSThread *thread=[NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
 74 
 75     [NSThread detachNewThreadSelector:@selector(run:) toTarget:self withObject:@"创建完线程直接(自动)启动"];
 76 }
 77 
 78 
 79 /**
 80  * NSThread创建线程方式3
 81  * 隐式创建线程, 并且直接(自动)启动
 82  */
 83 
 84 -(void)creatNSThread3
 85 {
 86     //在后台线程中执行===在子线程中执行
 87     [self performSelectorInBackground:@selector(run:) withObject:@"隐式创建"];
 88 }
 89 
 90 
 91 
 92 -(void)run:(NSString *)str
 93 {
 94    //获取当前线程
 95     NSThread *current=[NSThread currentThread];
 96     //打印输出
 97     for (int i=0; i<10; i++) {
 98        NSLog(@"run---%@---%@",current,str);
 99     }
100 }
101 @end

调用线程1,打印结果为:

调用线程

调用线程

目录
相关文章
|
12天前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
107 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
127 66
|
23天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
30天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
64 1
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
150 3
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!

热门文章

最新文章