zoukankan      html  css  js  c++  java
  • 多线程知识点(三)

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

    }

  • 相关阅读:
    java枚举实例
    POI读取excel
    POI导入
    javascript闭包
    dom4j测试
    Android开发UI之ListView中的Button点击设置
    eclipse不自动弹出提示(Alt+/ 快捷键失效)
    Android开发之全局获取Context的技巧
    Android开发之点击两次Back键退出App
    Android开发UI之开源项目第一篇——个性化控件(View)篇
  • 原文地址:https://www.cnblogs.com/chaoyueME/p/5574826.html
Copyright © 2011-2022 走看看