基础篇---多线程
来源:互联网 发布:然足下卜之鬼乎翻译 编辑:程序博客网 时间:2024/06/06 08:33
区分线程, 进程!
进程: 一个正在运行的程序
线程: 程序中独立运行的代码段
一个进程是由一个或多个线程组成的, 线程负责执行代码, 进程负责调度分配.
线程分为单线程, 多线程.
在以下三种情况下使用多线程:
1. 进行大量的运算的时候
2. 数据读取 (本地读取/数据库查询所有数据的时候)
3. 网络请求 (同步网络请求)
线程与线程之间是独立运行, 互不干扰的
多线程中不能对UI进行修改, 只能在主线程中修改
多线程方法中需要加自动释放池
多线程实现的种类: NSThread, NSObject, NSOperation(NSOperationQueue), NSBlockOperation, NSInvocationOperation, GCD多线程
1. NSThread是一种轻量级的多线程
初始化方法有两种:
- (instancetype)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
2. NSObject是最简单的后台
- (void)performSelectorInBackground:@selector(SEL)selector withObject:(id)arg;
3. NSOperation和NSOperationQueue
NSOperationQueue线程队列,会自动调用start方法
@property NSInteger maxConcurrentOperationCount;
设置线程的数量, 让各路线程排队执行, 当数量为1的时候, 我们称线程与线程之间是同步的- (void)addOperation:(NSOperation *)op;
4. NSBlockOperation
+ (instancetype)blockOperationWithBlock:(void (^)(void))block;
block中的内容就是多线程所要执行的代码5. NSInvocationOperation
- (instancetype)initWithTarget:(id)target selector:(SEL)sel object:(id)arg;
6. GCD多线程(最常用的)dispatch queue分为2种:
serailQueue: 实现线程同步, 一次执行一个任务
concurrent:并发执行多个任务, 遵循FIFO
(1) 创建一个同步线程队列(括号第一个参数是给线程起的名字, 第二个参数是表明线程是同步的
eg:dispatch_queue_t queue = dispatch_queue_create("first", DISPATCH_QUEUE_SERIAL);
(2) 异步执行同步线程队列
dispatch_async(queue, ^{
});
想显示到界面上,所有的跟UI有关的内容全部要在主线程运行, 所以用下面的代码返回主线程, 这里面的代码都是在主线程中运行
dispatch_async(dispatch_get_main_queue(), ^{
});
- Java基础-多线程基础篇
- 基础篇---多线程
- 多线程编程 基础篇
- 多线程(基础篇)
- Java多线程--基础篇
- java多线程基础篇
- Java多线程基础篇
- swift开发多线程篇 - 多线程基础
- 多线程编程 基础篇 (一)
- 多线程编程 基础篇 (二)
- 多线程编程 基础篇 (三)
- 多线程编程 基础篇 (四)
- 多线程编程 基础篇 (四)
- 多线程编程 基础篇 (四)
- 多线程编程 ------基础篇 (四)
- 多线程编程之基础篇
- 多线程--基础篇2--同步
- 多线程--基础篇4--其他
- php获取系统时间出现8小时误差
- opencv2反投影算法中使用颜色信息
- 使用foreach循环要注意的
- 环形队列的定义与操作
- iOS开发拓展篇—应用之间的跳转和数据传
- 基础篇---多线程
- java lesson 9-反射的使用
- 收藏一个python在线解释、教导网站
- 关于oracle with as用法
- oj平台 期末刷题二(第十一到十五)
- 漫步IOS--Xcode修改字体、多工程创建和切换
- 同一客户端多个git账号的配置
- 75前面提到的nameNotFoundException的解决
- 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)