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的主要内容,如果未能解决你的问题,请参考以下文章

iOS多线程方案总结及使用详解

iOS多线程篇:NSThread简单介绍和使用

iOS沉思录NSThreadGCDNSOperation多线程编程总结

iOS多线程NSThread,NSOperation和GCD详解