ios多线程

IOS多线程(NSThread)

怎甘沉沦 提交于 2020-03-20 02:08:34
1.创建方法 使用NSThread创建线程主要有两个个方法,分别如下 NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil]; [myThread start]; [NSThread detachNewThreadSelector:@selector( doSomething: ) toTarget:self withObject:nil]; 这两种方式的区别在于: 前一种 方式尽管alloc了一个新Thread,但需要手动调用start方法来启动线程。这点与Java创建线程的方式相似。第二种方式,与上述做法1使用NSObject的类方法performSelectorInBackground:withObject:是一样的;第二种方式的可以在start真正创建线程之前对其进行设置,比如设置线程的优先级。第二 种调用就会立即创建一个线程并执行selector方法。 使用 NSThread创建线程时,要在执行的方法中自行管理内存,否则会有内存溢出警告。 - (void) doSomething:(id)sender { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

IOS开发之多线程NSThread

倾然丶 夕夏残阳落幕 提交于 2020-03-20 01:57:17
一、什么是多线程 NSThread是轻量级的多线程开发,使用并不复杂,但使用NSThread需要自己管理线程的生命周期,这篇文章主要讲NSThread的使用 了解进程与线程 1. 线程是CPU执行任务的基本单位,一个进程能有多个线程,但同时只能执行一个任务 2. 进程就是运行中的软件,是动态的 3. 一个操作系统可以对应多个进程,一个进程可以有多条线程,但至少有一个线程 4. 同一个进程内的线程共享进程里的资源 2. 主线程 1. 进程一启动就自动创建 2. 显示和刷新UI界面 3. 处理UI事件 3. 子线程 1. 处理耗时的操作 2. 子线程不能用来刷新UI NSThread常用方法 使用NSThread开辟线程的两种方式: 创建并手动开启线程 NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(compete) object:nil]; [thread start]; 创建并自动开启线程 [NSThread detachNewThreadSelector:@selector(compete) toTarget:self withObject:nil]; 判断当前进程是否是多线程 BOOL isMultiThread = [NSThread isMultiThreaded];

iOS-NSThread多线程

*爱你&永不变心* 提交于 2020-03-20 01:52:35
NSThread 一、创建和启动线程 一个NSThread对象就代表一条线程 创建方法一: 优点:可以对线程进行更多的设置 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 //设置名字 - (void)setName:(NSString *)n; - (NSString *)name; 创建方法二 创建线程后自动启动线程 [NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil]; 或者 //隐式创建并启动线程 [self performSelectorInBackground:@selector(run) withObject:nil]; 上述2种创建线程方式的优缺点 + 优点:简单快捷,不用手动调用start方法, 系统会自动启动 + 缺点:无法对线程进行更详细的设置 二、相关使用方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 +

iOS多线程各种安全锁介绍 - 线程同步

*爱你&永不变心* 提交于 2020-03-17 08:58:04
一、atomic介绍 github对应Demo:https://github.com/Master-fd/LockDemo 在iOS中,@property 新增属性时,可以增加atomic选项,atomic会给对应对setter方法加锁,相当于 - (void)setTestStr:(NSString *)testStr { @synchronizad(lock){ if (testStr != _testStr) { [_testStr release]; _testStr = [testStr retain]; } } } 那么就有问题了,为什么atomic又不是线程安全的呢??而且还会代理性能问题,比起nonatomic性能可能要大减20倍,如果频繁的调用,可能更多。 1、当线程A,给TestStr设置值得时候,会调用对应的setter方法,也就是加锁了,此时B线程也要对TestStr进行设置新值,因为A线程已经锁住了,所以B只能等待,这个时候是 线程安全 的。 2、当线程A,给TestStr设置值得时候,此时B线程在读TestStr的值,因为setter和getter方法是没有联系的,这时,A在执行到加锁,只是还没有设置值,然而B线程已经读取走了,本来是想读取A设置之后的值,却读取了设置之前的值, 也就线程不安全 了。 3、当线程A,给TestStr设置值得时候

多线程

僤鯓⒐⒋嵵緔 提交于 2020-03-08 16:37:35
  大家好,本章我将给大家分享一下前几天自己对多线程的认知。    多线程 :是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。       线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.       线程和进程的区别在于,子进程和 父进程 有不同的代码和 数据空间 ,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,      根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。    多线程的三大特性: 原子性,可见性,有序性      原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。      可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。     有序性:即程序执行的顺序按照代码的先后顺序执行。    多线程的优缺点:   优点:     ·使用线程可以把占据时间长的程序中的任务放到后台去处理     ·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个 进度条 来显示处理的进度     ·程序的运行速度可能加快     

多线程简介

你。 提交于 2020-03-08 13:05:29
多线程简介 作用 多线程可以解决耗时操作(网络操作)卡顿UI的问题,将耗时操作放在后 台,待工作完成后,通知主线程更新UI 一个线程的数据可以直接提供给其他线程使用,叫做 线程间通信 线程生命周期的控制 分类 任务(代码)执行的俩种方式 同步:多个任务按顺序执行 异步:多个任务可以"同时"执行,异步就是多线程的代名词,使用多线程 技术就是为了让任务在子线程异步执行 内容 进程和线程 系统中,正在运行的程序,进程中的任务都是线程中执行的,线程是 进程最基本的执行单元,进程启动后,会默认开启一条线程,即是主线程 多线程 一个进程可以开启多个线程,同时异步执行不同的任务 执行原理:CPU在多个线程之间来回的切换调度线程执行 优缺点:可以"适当"提高程序执行的效率,还可以提升用户体验,但是当 线程非常多时,反而会大量的消耗CPU的资源 使用规则:在实际开发中,需要使用时尽量简单的使用,如果不需要使用, 绝对不要瞎用 注意 主线程/UI线程 是进程启动后,自动开启的,专门处理UI事件和刷新UI的,不要在主线程执 行耗时操作,会卡死UI __bridge(桥接) 当遇到C和OC混合开发时,需要用到桥接,在ARC环境下,编辑器不负责C 语言申请的内存,当涉及到OC和C语言的类型转换时,需要使用桥接告知 编辑器如何管理内存,在MRC环境下不需要 线程属性 主线程在IOS 8以后是512K

iOS中实现多线程的技术方案

老子叫甜甜 提交于 2020-03-08 10:02:59
pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { NSLog(@"---buttonclick---%zd---%@", i, [NSThread currentThread]); } return NULL; } @implementation ViewController - (IBAction)clickButton:(id)sender { // 定义一个线程 pthread_t thread; // 创建一个线程 (参1)pthread_t *restrict:创建线程的指针,(参2)const pthread_attr_t *restrict:线程属性 (参3)void *(*)(void *):线程执行的函数的指针,(参4)void *restrict:null pthread_create(&thread, NULL, run, NULL); // 何时回收线程不需要你考虑 pthread_t thread2; pthread_create(&thread2, NULL, run, NULL); } NSThread实现多线程 一个 NSThread 对象就代表一条线程 创建线程的多种方式 第一种方式:先创建再启动线程 // 创建线程

iOS多线程之GCD详解

◇◆丶佛笑我妖孽 提交于 2020-03-08 10:02:49
GCD(Grand Central Dispatch)是基于C语言开发的一套多线程开发机制。也是目前苹果官方推荐的多线程开发方法。iOS三种多线程开发中GCD是抽象层次最高的。当然用起来也是最简单的。只是它基于C语言开发。并不像NSOperation是面向对象的开发。而是完全面向过程的。这种机制相比较于前面两种多线程开发方式最明显的优点就是它对于多核运算更佳有效。 GCD中也有一个类似于NSoperationQueue的队列,GCD统一管理整个队列中的任务。但是GCD中的队列氛围并行队列和串行队列两类。   串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。   并发队列:有多个线程,操作进来之后他会将这些队列安排到可用的处理器上。同时保证先进来的任务优先处理。 其实在GCD中还有一个特殊的队列就是主队列,用来执行主线程上的操作任务。(从前面的演示中可以看到其实在NSOperation中也有一个主队列) 串行队列 使用串行队列时首先要创立一个串行队列,然后调用异步调用方法,在此方法中传入串行队列和线程操作即可自动执行。下面就是一个例子。 #define ROW_COUNT 5 #define COLUMN_COUNT 3 #define ROW_HEIGHT 100 #define ROW_WIDTH ROW_HEIGHT #define CELL_SPACING 10

iOS多线程

不想你离开。 提交于 2020-03-08 10:02:07
/*--> */ /*--> */ https://www.jianshu.com/p/0b0d9b1f1f19 Pthreads NSThread GCD NSOperation & NSOperationQueue 线程同步、 延时执行、 单例模式 1 、 Pthreads : POSIX 线程 pthread_create(&thread, NULL, start, NULL); 2 、 NSThread 1— 先创建线程类,再启动 // 创建 NSThread *thread = [[ NSThread alloc] initWithTarget: self selector: @selector (run:) object:nil]; // 启动 [thread start]; 2- 创建并自动启动 [ NSThread detachNewThreadSelector: @selector (run:) toTarget: self withObject:nil]; 3- NSObject 的方法创建并自动启动 [ self performSelectorInBackground: @selector (run:) withObject:nil]; 3 、 GCD 任务 和 队列 同步( sync ) 和 异步( async ) 会不会阻塞当前线程,直到 Block

关于iOS多线程的总结

笑着哭i 提交于 2020-03-08 10:01:16
关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案例,在实际使用中感受它们的区别。还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园。OK,let's begin! 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问题,这些我们应该都知道的。 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例。在将这些内容的时候,我也会顺带说一些多线程周边产品。比如: 线程同步 、 延时执行 、 单例模式 等等。 Pthreads 其实这个方案不用说的,只是拿来充个数,为了让大家了解一下就好了。百度百科里是这么说的: POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。 简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强