标签:
首先要明白进程与线程的区别, 我参考的此文
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];
标签:
原文地址:http://www.cnblogs.com/ahlearn/p/4776948.html