• 多线程知识点(五)


    1. 使用SD下载图片

    #import "UIImageView+WebCache.h"

    [self.HMImageView sd_setImageWithURL:url placeholderImage:nil options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {

    //receivedSize 接收到的文件大小, expectedSize文件的总大小} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {    }];

     

    1. 使用SD下载GIF

    #import "UIImage+GIF.h"

    //方式1:

    self.HMImageView.image = [UIImage sd_animatedGIFNamed:@"2"];

    //方式2

      //获取图片路径

        NSString *path = [[NSBundle mainBundle]pathForResource:@"2.gif" ofType:nil];

        //转成二进制

        NSData *data = [NSData dataWithContentsOfFile:path];

       

        self.HMImageView.image = [UIImage sd_animatedGIFWithData:data];

    1. 使用系统自带的cache,使用方式与字典相同

    第一步:

    //全局cache

    @property(nonatomic,strong)NSCache *cache;

    第二步:

    - (NSCache *)cache{

        if (_cache == nil) {

            _cache = [[NSCache alloc]init];

                    //设置缓存数量

            _cache.countLimit = 5

        }

        return _cache;

    }

     第三步:

    存取数据

    //存储数据

            [self.cache setObject:[NSString stringWithFormat:@"hello %d",i] forKey:[NSString stringWithFormat:@"haha %d",i]];

    第四步:

    读取数据

    NSLog(@"%@",[self.cache objectForKey:[NSString stringWithFormat:@"haha %d",i]]);

    缓存移除的时候调用的方法

    第一步遵守协议<NSCacheDelegate>

    //对象将要被移除的时候调用

    - (void)cache:(NSCache *)cache willEvictObject:(id)obj

    {

        NSLog(@"willEvict %@",obj);

    }

    4:消息循环: runloop

        每一个线程内部都有一个消息循环

    只有主线程的消息循环默认开启,子线程的消息循环默认不开启

    5:消息循环的作用:

    1:能够保证应用程序不退出

    2: 能够处理输入事件

    6. 输入事件的模式必须和消息循环的模式相互匹配,才能够执行输入事件的代码NSDefaultRunLoopMode ,NSRunLoopCommonModes(包括其余两个) UITrackingRunLoopMode

    7.设置消息循环的模式:

    [[NSRunLoop currentRunLoop]addTimer:timer forMode:UITrackingRunLoopMode];

    8.开启子线程:[[NSRunLoop currentRunLoop]addTimer:timer forMode:UITrackingRunLoopMode];

    9.开启子线程

    [self performSelector:@selector(demo) onThread:thread withObject:nil waitUntilDone:NO];

    10.子线程的消息循环(死循环)默认是不开启的,手动开启

    [[NSRunLoop currentRunLoop]run];

    或者,定时

    [[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3.0]];

  • 相关阅读:
    Mysql添加远程访问权限
    Android下安装应用不成功解决
    Unity 编译apk启动出异常
    Java 实现函数回调
    C# 实现函数回调
    北京数字认证无领导小组讨论总结
    深圳市共进电子 嵌入式软件工程师笔试题
    北京君正和博彦科技笔试体会及总结
    9月5日 华为2014校园招聘的机试题目_C语言版答案
    ios客户端base64上传图片到java服务器遇到的问题
  • 原文地址:https://www.cnblogs.com/chaoyueME/p/5575188.html
Copyright © 2020-2023  润新知