NSThread
NSThread
  方法介绍
    动态创建，需要手动启动
      NSThread *newThread = [[NSThread alloc]initWithTarget:self
selector:@selector(threadRun) object:nil];
[newThread start];
    静态创建
      [NSThread detachNewThreadSelector:@selector(threadTestRun) toTarget:self withObject:nil];
    获取线程
      [NSThread currentThread]; 获取当前线程
[NSThread mainThread]; 获取主线程
    线程暂停
      NSThread的暂停会有阻塞当前线程的效果
[NSThread sleepForTimeInterval:1.0];　（以暂停一秒为例）
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
    线程取消
      取消线程并不会马上停止并退出线程，仅仅只作（线程是否需要退出）状态记录
[newThread cancel];
    线程停止
      停止方法会立即终止除主线程以外所有线程（无论是否在执行任务）并退出，需要在掌控所有线程状态的情况下调用此方法，
否则可能会导致内存问题。
[NSThread exit];
    状态查询
      - (BOOL)isExecuting；是否正在执行
- (BOOL)isFinished；是否完成
- (BOOL)isCancelled；是否取消
    线程优先级设置
      [newThread setQualityOfService:NSQualityOfServiceUserInitiated];
    线程间通信
      当前线程执行操作
        [self performSelector:@selector(threadRun)];
[self performSelector:@selector(threadRun) withObject:nil];
[self performSelector:@selector(threadRun) withObject:nil afterDelay:2.0];
      主线程执行操作
        [self performSelectorOnMainThread:@selector(threadRun) withObject:nil
waitUntilDone:YES];
waitUntilDone为YES时，threadRun执行完毕后才执行其后主线程的代码逻辑
waitUntilDone为NO时，threadRun在其后主线程代码执行完毕后才执行
      其他线程执行操作
        [self performSelector:@selector(threadRun) onThread:newThread
withObject:nil waitUntilDone:YES];
//这里指定为某个线程
[self performSelectorInBackground:@selector(threadRun) withObject:nil];
//这里指定为后台线程
  结合runloop实现常驻线程，参考runloop
  简介
    NSThread是基于线程使用，轻量级的多线程编程方法（相对GCD和NSOperation），一个NSThread对象代表一个线程，
需要手动管理线程的生命周期，处理线程同步等问题。
qualityOfService的枚举值如下：
NSQualityOfServiceUserInteractive：最高优先级，用于用户交互事件
NSQualityOfServiceUserInitiated：次高优先级，用于用户需要马上执行的事件
NSQualityOfServiceDefault：默认优先级，主线程和没有设置优先级的线程都默认为这个优先级
NSQualityOfServiceUtility：普通优先级，用于普通任务
NSQualityOfServiceBackground：最低优先级，用于不重要的任务