码迷,mamicode.com
首页 > 编程语言 > 详细

Thread线程

时间:2015-09-02 00:25:49      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

首先要明白进程与线程的区别, 我参考的此文

http://jingyan.baidu.com/article/624e74598efcc834e9ba5a66.html

简单的可以理解为:

进程: 一个正在运行的可执行文件, 每个进程都有独立的虚拟内存空间和系统资源, 包括端口权限等, 并且至少包含一个主线程和任意数量的辅助线程, 另外, 当一个进程的主线程退出时, 这个进程就结束了.

线程: 一个独立的代码执行路径(线程是代码执行的最小分支) 由线程做资源的分配和调度.

第一个问题就是我们的程序什么时候才需要另外去创建线程,一个程序需要执行多个功能时,其中的一些功能会影响其他功能的执行,造成程序的假死状态,

多线程可以加速程序的执行, 把一些复杂的操作放在子线程中执行, 避免阻塞主线程
当多个线程共同操作统一块资源时, 需要进行管理(比如对资源加锁), 避免出现抢夺资源

NSLock 锁类 继承于NSObject, 为了防止多个线程抢夺资源,经常会为这个资源加上锁

**iOS创建线程的方式:

1:[NSThread detachNewThreadSelector:@selector(myThreadMethod:) toTarget:self withObject:nil]; 调用立即创建一个新线程执行操作
2:NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadMethod:)  object:nil]; [myThread start];     NSThread初始化之后,新的线程并没有执行,而是调用 start 时才会创建线程执行。这种方法相对上面的方法更加灵活,在启动新的线程之前,对线程进行相应的操作,比如设置优先级,加锁。

3:[myObj performSelectorInBackground:@selector(myThreadMainMethod) withObject:nil];         利用 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程:

以上都可以在新的线程中调用performSelectorOnMainThread: withObject:waitUntilDone:更新UI,因为子线程不能直接更新UI。

[NSThread sleepForTimeInterval:5];  线程休眠 设置线程在多少秒后执行

**主线程和子线程的区别:
    1.能够分配的资源最大容量不同
    2.子线程不会释放autorelease的对象, 需要手动添加自动释放池
    3.更新UI的操作,必须在主线程中执行

***NSOperationQueue  操作队列(任务队列) 继承于NSObject, 操作队列绑定的有一个线程

注: 任务只能执行一次;已经添加到队列中,就不能再添加

NSOperation 任务(操作)类 继承于NSObject  是一个抽象基类
      子类:  NSInvocationOperation NSBlockOperation

[A  addDependency B]任务依赖关系 A依赖B
串行, 并发  主要的区别在于同时执行的任务的数量
    串行: 一次只能执行一个任务, 并且必须等上一个任务执行完, 才能执行下一个任务
    并发: 允许多个任务同时执行

一旦任务添加到操作队列中, 不能移除, 只能取消
    并且只能取消没有执行的操作
    取消单个任务  [A  cancel];
    取消所有任务
    [Queue cancelAllOperations];

 

 

 

Thread线程

标签:

原文地址:http://www.cnblogs.com/ahlearn/p/4776948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!