美文网首页
05-多线程(3)

05-多线程(3)

作者: cdd48b9d36e0 | 来源:发表于2017-02-10 01:02 被阅读8次

0710SDWebImage和RunLoop

1、SDWebImage常用API(02-sdwebimage)

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placeholder"]];
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placeholder"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        // expectedSize: 图片的总字节数
        // receivedSize: 已经接收的图片字节数
        
        NSLog(@"下载进度:%f", 1.0 * receivedSize / expectedSize);
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        NSLog(@"下载完图片");
    }];
//纯下载图片,可以给其他控件设置图片
    [[SDWebImageManager sharedManager] downloadImageWithURL:nil options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
        
    }];
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    // 清除内存缓存
    [[SDWebImageManager sharedManager].imageCache clearMemory];
    // 取消所有下载
    [[SDWebImageManager sharedManager] cancelAll];
}

2、安装cocoapods步骤(03-使用cocoapods管理第三方框架)

  1. 更换为cocoapods的源为国内的淘宝源
  2. 更新gem
  3. 安装pod
  4. 更换repo镜像为国内服务器(仓库)
  5. 初始化三方库信息(pod setup)
  6. 初始化完了可以搜索验证(pod search)
  7. 以后更新三方库信息(pod repo update)
  8. 下面就可以在一个项目中使用cocoapods了

3、RunLoop(04-runloop01-简介)

  1. RunLoop就是运行循环(do-while循环)(注意,Runloop并不是一直都在不停的转,当没事干的时候会休眠,有事的时候才会转起来)
int main(int argc, char * argv[]) {
    @autoreleasepool {
        
        NSLog(@"1111");
        //这个UIApplicationMain内部就是开启了一个运行循环,可以看到1111打印后2222在程序运行期间永远不会打印
        //这个默认启动的RunLoop是跟主线程相关联的
        int result = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        NSLog(@"22222");
        return result;
    }
}
  1. RunLoop与线程
  • 每条线程都有唯一的一个与之对应的RunLoop对象
  • 主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
  • RunLoop在第一次获取时创建,在线程结束时销毁
    - (void)viewDidLoad {
    [super viewDidLoad]; 
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
    [thread start];
}
    - (void)run
{
    //说明:
    //子线程RunLoop默认是没有开启的,需要手动开启
   //创建方法就是[NSRunLoop currentRunLoop],因为它是懒加载(此时只是创建了,并没有跑起来)
   //runloop在程序里是以字典形式保存的,key是线程,value就是runloop
    NSLog(@"-----run--%p", [NSRunLoop currentRunLoop]); 
}
  1. Runloop相关类


关于Timer的说明:

NSRunLoopCommonModes是个模式的标记,并非真正的Mode,真正的Mode只有前四个。比如,我们常用的[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];这个API已经在内部把定时器加入到运行循环,这一句等价于下面两句NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];但是定时器只运行在NSDefaultRunLoopMode下,一旦RunLoop进入其他模式(比如拖拽tableview),这个定时器就不会工作,此时若改为[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];就可以在tableview滑动的时候也工作了,而且是在kCFRunLoopDefaultMode和UITrackingRunLoopMode两种模式下的运行循环都能工作。
那么他的背后是怎么实现的呢?加入一个运行循环默认不是只能加入一种吗?其实是这样的,NSRunLoopCommonModes是一种标记,把[NSRunLoop currentRunLoop]打印出来就能看到kCFRunLoopDefaultMode和UITrackingRunLoopMode这两种模式是被标记为NSRunLoopCommonModes了的,这就是定时器能工作在两种模式下的原因
与此类似的另一个用于动画的定时器CADisplayLink也有个加入runloop的API:-(void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;

相关文章

  • 05-多线程(3)

    0710SDWebImage和RunLoop 1、SDWebImage常用API(02-sdwebimage) ...

  • 05-多线程

    什么是线程?什么是进程?线程和进程的区别与联系? 线程的定义线程是CPU调度(执行任务)的最小单位其实质就是一段代...

  • 05-多线程(2)

    0709-NSOperationQueue多图片下载 1、当一个控制器存在多个scrollView时最好把aut...

  • 05-多线程(4)

    0712RunLoop 1、关于Source的说明(02-runloop-source) source就是事件,处...

  • 05-多线程(1)

    0708-GCD单例模式 1、概述(01-多线程的基本概念) 多线程如果掌握得不好对一些性能方面的东西会做的不好...

  • 龙兄-人生赢家必修的十二堂说话课

    05-即兴表达

  • DAY2 Python基础 2018-06-12

    01-python初识 02-python3基础语法 03-python3基本数据类型 04-进制转换 05-变量...

  • 你可以相信我一回吗

    -2019​.05.​05-

  • Day18-多线程

    1.多线程技术1 2.多线程技术2 3.多线程技术 4.join函数

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

网友评论

      本文标题:05-多线程(3)

      本文链接:https://www.haomeiwen.com/subject/pftgittx.html