IOS-多线程知识
1.什么是进程,什么是线程?
一个运行的程序可以比作一个进程。一个进程中可以包括多个线程,但至少有一个主线程,每个线程可以比作程序的执行流。
2.运用线程应该注意的地方?
每个进程刚开始都会分配一定的内存,而创建的线程所用到内存是进程分配的内存。和用户交互的代码必须写在主线程中。主线程占1M内存,其他为512k的内存。
[NSThread currentThread]可以查看当前所在线程的任务。
3.多线程技术?
(1)NSThread:轻量级
创建线程方法:+(void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
- (void)initWithTarget:(id)target selector:(SEL)selector objdet:(id)argument;后接satrt方法;
关键函数:-(void)performSelectorInBackground:(SEL)aSelectorwithObject:(id)arg
当用到UI需要和用户交互时用到:-(void)performSelectorOnMainThread:(SEL)aSelectorwithObject: (id)arg waitUntilDone:(BOOL)wait;
线程休眠函数(调试使用):[NSThread sleepForTimeInterval:1.0f];
(2)NSOperation:可以设置线程的数量setMaxConcurrentOperationCount,以及同队列线程的先后顺序addDependency
一.Invocation创建线 程:NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self
selector:@selector(downloadImage:)
object:kURL];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue setMaxConcurrentOperationCount:2]; //同一时间可以并发两个线程
[queue addOperation:operation];
进入主线程:[NSOperationQueue mainQueue]addOperationWithBlock;
二.block创建线程
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{}];
[queue addOpertion:op];
进入主线程:[NSOpertionQueue mainQueue] addOperatonWithBlock:^{}];
4.GCD:队列的思想:有主队列(主线程),全局队列(异步),串行队列(同步)
在主线程中一定是同步的,只有在全局队列中 async异步 为异步 , sync为同步