NSThread 的用法】的更多相关文章

一.线程的注意点: 1.不要同时开太多的线程(最多不要超过5条,其中包括主线程) 2.线程概念 2.1.主线程:UI 线程,显示.刷新 UI 界面,处理 UI 控件的事件 2.2.子线程:后台线程,异步线程 3.不要把耗时的操作放在主线程,要放在子线程中执行 二.NSThread 用法 1.创建和启动线程的3种方式 1.1.先创建,后启动 // 创建 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@select…
    #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad];         //开启多线程方法一//    [self performSelectorInBackground:@selector(threadAction) withObject:nil];    …
上一篇文章稍微提及了一下NSThread的使用,NSThread能直观地控制线程对象,不过需要自己管理线程的生命周期,线程同步,用起来比较繁琐,而且比较容易出错.不过Apple给出了自己的解决方案NSOperation,它本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有NSInvocationOperation和NSBlockOperation两种方式,先补充一下NSThread的用法: NSThread获取当前线程: [NSThread currentThread]…
多线程是程序开发中非常基础的一个概念,大家在开发过程中应该或多或少用过相关的东西.同时这恰恰又是一个比较棘手的概念,一切跟多线程挂钩的东西都会变得复杂.如果使用过程中对多线程不够熟悉,很可能会埋下一些难以预料的坑. iOS中的多线程技术主要有NSThread, GCD和NSOperation.他们的封装层次依次递增,其中: NSThread封装性最差,最偏向于底层,主要基于thread使用 GCD是基于C的API,直接使用比较方便,主要基于task使用 NSOperation是基于GCD封装的N…
  本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation *)op;   需求:同时下载两张图片,两张图片都下载完了,在合成成一张.这个例子我在iOS多线程之6.GCD的其他用法这篇文章中用过,当时是用GCD的group实现的.这次我们用NSOPeration实现. 代码 // 点击屏幕下载图片 - (void)touchesBegan:(NSSet<UIT…
本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 本文源码 Demo 详见 Githubhttps://github.com/shorfng/iOS-4.0-multithreading.git 因为Pthread很少用到,所以对于Pthread的知识没有抠那么细致,所以将Pthread和 NSThread放在了一起. 4.1 Pthread 4.1-1.0 创建线程 - pthread_create /* <#pthread_t *r…
@synchronized(self)的用法: @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用. 例如:一个电影院,有3个售票员.一场电影的总数量固定.3个售票员售票时,要判断是非还有余票. #import "ViewController.h" @interface ViewController () /** 售票员01 */ @p…
一.基本使用1.创建和启动线程一个NSThread对象就代表一条线程 创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];// 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法+ (NSThread *)mainThread; // 获得主线程- (BOOL)isMainThread; //…
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat…
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat…
iOS开发Swift篇(02) NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThread在swift语境中的一些使用和注意点,别他. 3)本文涉及代码可以从https://github.com/HanGangAndHanMeimei/Code地址获得. 二 NSThread的基本使用和创建 1)基本用法(主线程|当前线程) //1.获得执行该方法的当前线程 let currentThrea…
零.线程的注意点(掌握) .不要同时开太多的线程(~3条线程即可,不要超过5条) .线程概念 > 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 > 子线程 : 后台线程,异步线程 .不要把耗时的操作放在主线程,要放在子线程中执行 一.NSThread(掌握) .创建和启动线程的3种方式 > 先创建,后启动 // 创建 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(do…
1.创建和启动线程   一个NSThread对象就代表一条线程;   创建,启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; 2.线程相关用法   主线程相关用法 + (NSThread *)mainThread; - (BOOL)isMainThread; + (BOOL)isMainThread; 获得当前线程 N…
NSThread NSThread 一个NSThread对象就代表一条线程 创建线程的几种方式 alloc/init // 1.创建线程 NJThread *thread = [[NJThread alloc] initWithTarget:self selector:@selector(demo:) object:@"lnj"]; // 设置线程名称 [thread setName:@"xmg"]; // 设置线程的优先级 // 优先级仅仅说明被CPU调用的可能性…
A.NSThread的基本使用 1.创建和启动线程 一个NSThread对象就代表一条线程创建.启动线程NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];// 线程一启动,就会在线程thread中执行self的run方法主线程相关用法+ (NSThread *)mainThread; // 获得主线程- (BOOL)isMainTh…
一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开 Chrome.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用QQ ,或者Xcode 都需要在线程中执行 3.线程的串行 1个线程中任务的执行是串行…
NSCondition的用法 使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题. 基本思路是,首先要创建公用的NSCondition实例.然后: 消费者取得锁,取产品,如果没有,则wait,这时会释放锁,直到有线程唤醒它去消费产品: 生产者制造产品,首先也是要取得锁,然后生产,再发signal,这样可唤醒wait的消费者. - (IBAction)conditionTest:(id)sender {     NSLog(@"begin condition works!&q…
原文出处: 容芳志的博客   欢迎分享原创到伯乐头条 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Central Dispatch) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的. 三种方式的优缺点介绍:1)NSThread:优点:NSThread 比其他两个轻量级缺点:需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销 NS…
创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 + (BOOL)isMainThread; // 是否为主线程 获得当前线程 NSThread *current…
1.NSThread创建方式(一个NSThread对象就代表一条线程)1.1>创建\启动线程(1)线程一启动,就会在thread中执行self的run方法NSTread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];(2)创建线程后自动启动线程[NSThread detachNewThreadSelector:@selector(run) toT…
NSCondition用法 使用NSCondition,实现多线程同步...举个列子 消费者跟生产者... 现在传言6s要出了.. 消费者想买6s.现在还没有6s.消费者等待6s生产. 生产了一个产品,唤起消费者去买6s.解锁 1 @interface ViewController () 2 /* 3 创建一个数组盛放生产的数据,创建一个线程锁 4 */ 5 @property (nonatomic, strong) NSCondition *condition; 6 @property (no…
创建和启动线程 一个NSThread对象就代表一条线程 // 创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 // 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread;…
原文出处: 容芳志的博客 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Central Dispatch) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的. 三种方式的优缺点介绍:1)NSThread:优点:NSThread 比其他两个轻量级缺点:需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销 NSThread实现的技术有下面…
1.一次性代码:dispatch_once 有时候,有些代码在程序中只要被执行一次. 整个程序运行过程中,只会执行一次. - (void)viewDidLoad { [super viewDidLoad]; static dispatch_once_t onceToken ; dispatch_once(&onceToken, ^{ NSLog(@"代码只执行一次"); }); } 2.延时执行 延时执行通常有两种方法: (1)普通用法 [self performSelecto…
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源代码传送:http://dwz.cn/Nret1 A.NSThread的基本使用 1.创建和启动线程 一个NSThread对象就代表一条线程…
进程 进程是指在系统中正在运行的一个应用程序 线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 1个线程中任务的执行是串行的(执行完上一个才能执行下一个) 多线程 1个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务 线程可以并行, 但是每个线程中的任务还是串行 多线程原理 多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换) 多线程优缺点 优点 能适当提高程序的执行效率 能适当提高资源利用率(CPU.内存利用率) 缺点 线程越多,CPU在调度…
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 (2)使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispat…
一.简介 (1)使用NSThread对象建立一个线程非常方便 (2)但是!要使用NSThread管理多个线程非常困难,不推荐使用 (3)技巧!使用[NSThreadcurrentThread]跟踪任务所在线程,适用于这三种技术 (4)一个NSThread对象就代表一条线程 二.创建和启动线程简单说明 创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil…
一.延迟执行 1.介绍 第一种方法,该方法在那个线程调用,那么run就在哪个线程执行(当前线程),通常是主线程. [self performSelector:@selector(run) withObject:nil afterDelay:3.0]; 说明:在3秒钟之后,执行run函数   第二种方法,什么时间,执行这个队列中的这个任务.如果队列是主队列,那么就在主线程执行,如果队列是并发队列,那么会新开启一个线程,                      在子线程中执行. dispatch_…
无论是GCD,NSOperationQueue或是NSThread, 都没有线程安全 在需要同步的时候需要使用NSLock或者它的子类进行加锁同步 "] UTF8String], DISPATCH_QUEUE_CONCURRENT); //每一次异步都在创建一个新线程, 同步的话,是在主线程上运行 ; i < ; i ++) { _totalTicket --; NSLog(@"获得1张票,当前票数=%d", _totalTicket); } }); - (void)s…