NSThread
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSThread相关的知识,希望对你有一定的参考价值。
1、NSThread的简介
NSThread是一种面向对象的轻量级的实现多线程的方式(Cocoa层操作)。NSThread是对pthread的上层封装,每个thread都代表一个线程。
优点:可以对多线程对象进行一系列管理,像名称、全局变量、优先级等。
缺点:1)、需要自己管理生命周期和线程同步 2)、实现线程同步和对数据的枷锁会产生内存消耗。
2、NSThread 的创建(4种方法)
#pragma -mark 隐式创建
//隐式创建 开辟速度慢,不需要开启
//1、隐式创建
[NSThread detachNewThreadSelector:@selector(subThreadcreate) toTarget:self withObject:nil];
//2、隐式创建
[self performSelectorInBackground:@selector(subThreadcreate) withObject:nil];
#pragma -mark 显式创建 注意启动
//显式创建 开辟速度快,需要开启(可以对属性进行一系列设置)
NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(subThreadcreate) object:nil];
thread1.name = @"thread1";
//启动
[thread1 start];
#pragma -mark 子类化创建
//子类化创建 重写入口函数(int main {})启动
thread2 = [[SubThread alloc] init];
//启动
[thread2 start];
3、对属性的设置
//名称
thread2.name = @"thread2";
//优先级
//范围 0 -- 1.0 1.0 最高
// thread2.threadPriority = 1.0; //ios 5.0 之后,qualityOfService取代threadPriority
thread2.qualityOfService = NSQualityOfServiceDefault;(决定该线程有限执行的概率大增,并不代表一定优先执行该线程)
//栈空间
thread2.stackSize = 100;
线程的执行状态
executing 正在执行
finished 执行网城
canceled 取消执行
4、线程之间的通信
例:子线程实现图片下载,(任务繁重的操作交给子线程执行,例如,下载图片、视频等)
对子线程的入口进行完善(子类化实现线程的开辟时)
设置AutoRelease Pool
设置RunLoop
终止线程
5、加锁
iOS中提供了NSLock对象实现枷锁
初始化对象 _lock = [[UILock alloc]init];
加锁 [_lock lock];
解锁 [_lock unlock];
6、线程同步
A线程等地B线程执行后的某个结果继续执行
UICondation *_condation = [[UICondatino alloc] init];
[self performSelectorInBackground:@selector(waiting) withObject:str];
- (void)waiting{
[_condation lock];
[_condatino wait];
}
[self performSelectorOnMainThread:@selector(setImageWithImg:) withObject:_image waitUntilDone:YES];
- (Void)sendMsg{
[_condation signal];
}
以上是关于NSThread的主要内容,如果未能解决你的问题,请参考以下文章