一个应用程序即一个进程,一个进程中可以开多条线程;多线程编程,也叫并发编程。
Mach是第一个以多线程方式处理任务的系统,因此多线程的底层是基于Mach的线程。开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的。
- C语言的POSIX接口:#include <pthread.h>;
- OC的NSThread;
- C语言的GCD接口(原生的)(性能最好,代码更简洁)(充分利用系统的核)(Mac iOS内核是UNIX);
- OC的NSOperation和NSOperationQueue(基于GCD);
多线程之间的通信
(1)
[self performSelector:<#SEL#> onThread:<#NSThread#> withObject:@”123” waitUntilDone:(<BOOL>)];
(2)NSMachPort
实例:
- 控制器向服务器发送数据请求,在子线程中实现;回到主线程刷新UI界面。
// 在异步线程做事情
dispatch_async(dispatch_get_main_queue(), ) {
// 回到主线程刷新UI界面
}
网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题
- (1)使用SDWebImage;
- (2)开辟子线程下载图片,缓存处理;
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSData*data = [NSData dataWithContentsOfURL:url ];
cell.imageView.image = [UIImage imageWithData:data];
}];
[self.queue addOperation:operation];
GCD的底层实现
(1)iOS和OS X的核心是XNU内核,因此GCD是基于XNU内核实现的;
(2)GCD的API全部在libdispatch库中;
(3)GCD的底层实现主要有Dispatch Queue和Dispatch Source;
- Dispatch Queue:管理block,管理操作在主线程或者异步线程执行;
- Dispatch Source:处理事件;
dispatch_async(dispatch_queue_t, <#(void)block#>);
GCD&NSOperation
(1)GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本封装;
(2)GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,和最大并发数;queue.maxConcurrentOperationCount = 1;
(3)GCD的执行速度比NSOperationQueue快;
(4)GCD不支持KVO;
(5)NSOperation可以轻松在Operation间添加依赖,设置执行顺序,而GCD需要写很多的代码才能实现;
(6)NSOperation可以设置对大并发数,以及优先级;
(7)NSOperationQueue支持KVO,可以监测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCanceled);
(8)NSOperation基于GCD, 支持KVO,[operation isFinished]监听operation是否执行完成,监听任务的执行情况
(9)NSOperation速度比GCD慢, 要求时刻监听,使用NSOperation
(10)使用规则:
- 任务之间不太相互依赖:GCD;
- 任务之间有依赖或者要监听任务的执行情况:NSOperationQueue;
GCD以及block的使用要注意些什么
(1)循环引用
(2)block的内存管理
- MRC:__block
- ARC:__weak/__unsafe_unretained
block
block里面所有的代码会自动执行,并且在后台执行。把下载操作放在block里面,系统会把下载操作放在子线程中执行,下载完成,回到主线程填充图片数据。
self.images[@”124123.png”] = downloadImage;
// 下载完成,存入缓存
block的内存管理
- 默认放在栈里面
- 调用copy方法,是放在堆里面
Socket, TCP/IP, UDP, XMPP, HTTP
Http:超文本传输协议,用于网络数据传输的格式
- 短链接,一次性的
- 只有服务器能接收http请求,客户端不能接受http请求
- 适合做一对一的相应
Socket:套接字,是一个用于传输网络数据的工具,创建链接最耗时 - TCP/IP:传输协议
- 适合聊天
- XMPP
- 长链接
- 传输速度慢(相对UDP),不会丢失数据包(安全)
- UDP:传输协议
- 一般用在游戏里面
- 局域网游戏
- 网络游戏
- 传输速度快,容易丢数据包(不安全)
- 大文件传输只能用Socket
- 文件断点续传,使用socket,其他情况使用AFN
XMPP:做即时通讯(基于TCP/IP)
socket可以发送TCP\IP,UDP,HTTP请求
- 大文件传输只能用socket,支持断点续传
- 上传图片使用http请求
- HTTP是一对一请求
音频压缩
音频序列服务
音频文件 -> 字节压缩
数据压缩框架
网友评论