多线程知识点(三)

  1. 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]];

}

原文地址:https://www.cnblogs.com/chaoyueME/p/5574826.html