iOS 多线程基础 三、NSThread

2018-03-25  本文已影响26人  PPFSaber

严格意义上来讲 在iOS 中只有 pthread 和 NSThread 是真正的多线程技术,可以直接进行多线程操作,GCD 和NSOperation 则属于并发技术,NSOperation属于对GCD的封装。

NSThread 的简单应用

NSThread常用创建 方法

NSThread *thread1 = [[NSThread alloc]initWithBlock:^{
    NSLog(@"thread1");
}];

[thread1 start];

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

注意这两个方法 NSThread 需要手动调用 start 方法开始执行任务

这两个类方法是让线程暂时睡眠用的 第一个方法是睡到什么时候,第二个方法是睡多久。

者两个方法是读取和设置线程优先级 取值范围 0 到 1,线程默认优先级 0.5,如果没有特殊需求苹果不建议修改线程优先级,否则有一定几率可能产生线程优先级翻转的情况( 有对应的实例变量 threadPriority 不过iOS 8.0 之后已经用NSQualityOfService qualityOfService 的枚举取代了)。

@property (nullable, copy) NSString *name
线程名字,调试代码的寻找bug 的时候很有用的多线程属性。在大型的商业项目中,通常希望程序在崩溃的时候,能够获取到程序准确的所以在的线程!

@property NSUInteger stackSize 实例变量
stackSize实例变量 线程的栈大小 普通线程默认512kb,可以手动设置,但是必须是4k的倍数,而且最小是16KB

线程的状态

内存中有一个专门的区域叫可调度线程池,由CPU进行调度操作。
通过前边的start 方法的调用我们可知线程是有状态的,具体有以下几个状态 :新建、就绪(添加入可调度线程池)、运行、阻塞(阻塞状态的时候线程会移出可调度线程池)、死亡(死亡状态的时候线程会移出可调度线程池)

线程的状态.png

线程间通信

在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。线程间通信的体现,1个线程传递数据给另1个线程,在1个线程中执行完特定任务后,转到另1个线程继续执行任务

线程间通信常用方法

在NSThread 中有一个NSObject 的分类 用于简单方便的使用多线程中的线程间通信技术技术
@interface NSObject (NSThreadPerformAdditions)

上一篇 下一篇

猜你喜欢

热点阅读