iOS-多线程的底层实现
(1)首先回答什么是线程
1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行
(2)什么是多线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下载图片
UIImage *image = nil;
dispatch_async(dispatch_get_main_queue(), ^{
// 回到主线程
});
(2)NSThread的线程通信
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下载图片
UIImage *image = nil;
[self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES modes:nil];
}
这种情况 也适用于子线程之间的通信。
(3)NSThread的线程通信
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 下载图片
UIImage *image = nil;
[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:YES];
}
3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题
利用字典图片地址为key,下载操作为value
4. 列举cocoa中常见对几种多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制?
1》开发中实现多线程的方案
最新文章
- 关于Java语言中那些修饰符
- ios7 ios8 cell中下划线偏移(separator Insets)处理方法
- 贴近用户体验的jQuery日期选择插件
- js图片轮播图
- Bootstrap与tab组合,切换菜单实例
- SKPhysicsJointFixed类
- RTP 包格式 详细解析
- POJ1502(Dijkstra)
- Jenkins + robot framework自动发送邮件报告
- Homestead PHP7安装phpredis扩展
- Pin学习笔记--安装及一些基本知识
- Codeforces 839C Journey【DFS】
- shell中awk printf的用法
- spring cloud config--client
- pyhon----模块导入
- 微软BI 之SSIS 系列 - 两种将 SQL Server 数据库数据输出成 XML 文件的方法
- 2012年蓝桥杯省赛A组c++第3题(喝断片的海盗)
- python安装pandas和lxml
- maven私服的使用
- 第32章:MongoDB-索引--Capped固定集合