- NSOperationQueue作为全局队列,可以设置最大并发数
-(NSOperationQueue *)queue
{
if (_queue == nil) {
_queue = [[NSOperationQueue alloc]init];
//最大并发数
_queue.maxConcurrentOperationCount = }
return _queue;
}
2设置操作的暂停,继续,取消
- (IBAction)cancle:(id)sender {
//取消操作
[self.queue cancelAllOperations];
NSLog(@"取消");
}
//暂停 暂停还没有执行的操作,正在执行的操作继续执行
- (IBAction)suspend:(id)sender {
//Suspended 暂停
[self.queue setSuspended:YES];
NSLog(@"暂停");
}
//继续
- (IBAction)jixu:(id)sender {
[self.queue setSuspended:NO];
NSLog(@"继续");
}
3 .下载的耗时操作放在子线程里面执行,死循环放在子线程里面执行
4.采用[self.queue setSuspended:YES]进行将队列里面的操作暂停,里面的操作数不能过大,否则任务停止不下来
5.刷新ui的操作如果添加的太多,uishua’x刷新的速度就会加快,如果只有相同的刷新操作,只需要判断操作数的个数,例如
if (self.queue.operationCount == 0) {
[self.queue addOperationWithBlock:^{
刷新ui//在主线程执行
}];
如果刷新ui的操作并不止一种,可以添加操作缓存池
6. //设置服务质量ios8之后推荐 iOS8之前是优先级
[op setQualityOfService:NSQualityOfServiceUserInteractive];
7.添加多个操作(操作数组)
[self.queue addOperations:@[op,op2] waitUntilFinished:NO];
8.监听操作完成
[op2 setCompletionBlock:^{
NSLog(@"op2 CompletionBlock");
}];
9.设置操作依赖,可以是不同的队列里面的操作
[op2 addDependency:op];
[op3 addDependency:op2];
10.根据网址下载图片
//获取图片链接地址
NSURL *url = [NSURL URLWithString:model.icon];
//进行图片下载,二进制
NSData *data = [NSData dataWithContentsOfURL:url];
//把二进制转化成UIimage
UIImage *img = [UIImage imageWithData:data];
11. 获取模型给cell赋值 cell控件是懒加载
12.当收到内存警告的时候清空内存
//当收到内存警告的时候调用
- (void)didReceiveMemoryWarning
{
//清空图片缓存池
NSLog(@"didReceiveMemoryWarning");
}
13.设置图片缓存池(字典)
- (NSMutableDictionary *)imgCache
{
_imgCache = [NSMutableDictionary dictionaryWithCapacity:10];
}
return _imgCache;
}
为字典添加键值对
[self.imgCache setObject:img forKey:model.icon];
self.imgCache[model.icon] = img;
14.为了防止因为耗时操作,tableView的cell的imageView上面的图片出现下载错位的情况,可以在下载完成的时候,刷新tableView
15.为了节省用户的流量,可以将下载好的图片保存到图片缓存池(字典),先判断缓存池里面释放存在图片,没有再去下载
下载是耗时操作,可能未下载下来的时候已经添加到了队列当中,但是图片认为空,所以设置操作缓存池(字典),已近存在的操作就不继续添加到队列当中
16. 循环引用 self -> queue,OperationCache -> op - >block - >self
17.为NSString创建一个分类 NSString+sandBox.h
创建三个类方法:获取沙河路径
//获取Cache路径
- (instancetype)appdendCache
{
return [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[self lastPathComponent]];
}
//获取Documents路径
- (instancetype)appdendDocuments
{
return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[self lastPathComponent]];
}
//获取Temp路径
- (instancetype)appdendTemp
{
return [NSTemporaryDirectory() stringByAppendingPathComponent:[self lastPathComponent]];
}