关于IOS中GCD,NSThread和NSOperation的一些总结

本文详细介绍了iOS开发中的三种多线程技术:NSThread、NSOperation及GCD的特点与用法。包括线程创建、操作执行与取消、任务调度等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS的三种多线程技术特点:

1.NSThread:

    1> 使用NSThread对象建立一个线程非常方便;

    2> 但是!要使用NSThread管理多个线程非常困难,不推荐使用;

    3> 技巧!使用[NSThread currentThread]跟踪任务所在线程,适用于这三种技术.

2.NSOperation/NSOperationQueue:

    1> 是使用GCD实现的一套Objective-C的API;

    2> 是面向对象的多线程技术;

    3> 提供了一些在GCD中不容易实现的特性,如:限制最大并发数量,操作之间的依赖关系.

3.GCD---Grand Central Dispatch:

    1> 是基于C语言的底层API;

    2> 用Block定义任务,使用起来非常灵活便捷;

    3> 提供了更多的控制能力以及操作队列中所不能使用的底层函数.

一.NSThread

    Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步。线程共享同一应用程序的部分内存空间,它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。在 iOS 中我们可以使用多种形式的 thread:
Cocoa threads: 使用NSThread 或直接从 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程。如果你选择thread来实现多线程,那么 NSThread 就是官方推荐优先选用的方式。

线程创建与启动:
 NSThread的创建主要有两种直接方式:
 [NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil];
 NSThread* myThread = [[NSThread alloc] initWithTarget:self
                                        selector:@selector(myThreadMainMethod:)
                                        object:nil];
 [myThread start];

这两种方式的区别是:前一种一调用就会立即创建一个线程来做事情;而后一种虽然你 alloc 了也 init了,但是要直到我们手动调用 start 启动线程时才会真正去创建线程。这种延迟实现思想在很多跟资源相关的地方都有用到。后一种方式我们还可以在启动线程之前,对线程进行配置,比如设置 stack 大小,线程优先级。

  还有一种间接的方式,更加方便,我们甚至不需要显式编写 NSThread 相关代码。那就是利用 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程:
  [myObj performSelectorInBackground:@selector(myThreadMainMethod) withObject:nil];
  其效果与 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一样的。

附:performSelectorInBackground : withObject 代码示例:

 9 #import "YYViewController.h"
10 @interface YYViewController ()
11 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
12 @end
13 
14 @implementation YYViewController
15 
16 - (void)viewDidLoad
17 {
18     [super viewDidLoad];
19 }
20 
21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
22 {
23 
24 // 在子线程中调用download方法下载图片
25     [self performSelectorInBackground:@selector(download) withObject:nil];
26 }
27 
28  
29 
30 -(void)download
31 {
32     //1.根据URL下载图片
33     //从网络中下载图片
34     NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
35 
36     //把图片转换为二进制的数据
37     NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
38 
39     //把数据转换成图片
40     UIImage *image=[UIImage imageWithData:data];
41  
42     //2.回到主线程中设置图片
43     [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
44 }
45 
46  
47 
48 //设置显示图片
49 -(void)settingImage:(UIImage *)image
50 {
51     self.iconView.image=image;
52 }
53 
54 @end
二.NSoperation

1.简介

NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。

NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种:

1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation

2> 自定义子类继承NSOperation,实现内部相应的方法

2.执行操作

NSOperation调用start方法即可开始执行操作,NSOperation对象默认按同步方式执行,也就是在调用start方法的那个线程中直接执行。NSOperation对象的isConcurrent方法会告诉我们这个操作相对于调用start方法的线程,是同步还是异步执行。isConcurrent方法默认返回NO,表示操作与调用线程同步执行

3.取消操作

operation开始执行之后, 默认会一直执行操作直到完成,我们也可以调用cancel方法中途取消操作

4.监听操作的执行

如果我们想在一个NSOperation执行完毕后做一些事情,就调用NSOperation的setCompletionBlock方法来设置想做的事情


三.GCD

请看这篇文章:http://blog.youkuaiyun.com/q199109106q/article/details/8566300






   推荐网站:http://objccn.io/issue-2-1/
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值