博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018面试题整理
阅读量:4363 次
发布时间:2019-06-07

本文共 1781 字,大约阅读时间需要 5 分钟。

runtimerunloop的区别

runtime

  1. 动态添加对象的成员变量和方法。
  2. 获取某个类的成员变量和方法。
  3. 为类别添加属性

runloop

基本作用

  1. 保持程序的持续运行。
  2. 处理App中的各类事件(触摸事件、定时器事件等)
  3. 节省CPU资源,提高程序性能(没有事件时就进入睡眠状态)

内部实现

do-while循环,在这个循环内不断地处理各种任务

注意

一个线程对应一个runloop,采用字典存储,线程号为key,runloop为value;

主线程的runloop默认已经启动,子线程的runloop需要手动启动。

runloop在第一次获取时创建,在线程结束时销毁。

SDWebImage相关

查找url对应的图片缓存是否存在

UIImage *defaultImg = [UIImage imageNamed:@"defaultimage"];NSString *urlStr = @"http://n.sinaimg.cn/edu/transform/20160505/pe7k-fxryhhu2274915.png";//查找对应的图片缓存,key为urlUIImage *originalImg = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:urlStr];if (originalImg) {    imgView.image = originalImg;} else {    [imgView sd_setImageWithURL:[NSURL URLWithString:urlStr] placeholderImage:defaultImg];}

TableViewCell复用加载图片的处理

由于cell的复用机制,在我们加载一个cell的时候,ImageView数据源开启一个下载任务并返回一个Image,当cell重用时,其数据源又会开启一个下载任务下载新的Image,但关联的对象是同一个imageView,这个时候直接setImage就会发生错乱。

SDWebImage的处理是:

  1. imageView对象会关联一个下载列表(列表是给AnimationImages用的,这个时候会下载多张图片)。当tableView滑动,imageView重设数据源(url)时,会cancel掉下载列表中所有的任务,然后开启一个新的下载任务。这样就保证了只有当前课件的cell对象的imageView对象关联的下载任务能够回调,不会发生image错乱。
  2. 同时,SDWebImage管理了一个全局下载队列(在DownloadManager中),并发量设置为6。也就是说如果可见cell的数目大于6,就会有部分下载队列处于等待状态。而且,在添加下载任务到全局的下载队列中去的时候,SDWebImage默认是采取LIFO(last in,first out)策略的,具体是在添加下载任务的时候,将上次添加的下载任务添加依赖为新添加的下载任务。

针对同一图片链接的不同图片的处理

很多App里面用户头像的url用的都是同一个,所以可能就导致明明已经更新了头像,但是显示的图片还是原来的,这是因为修改头像后,图片的url是不变的,而默认情况下,SDWebImage对相同的url是优先使用缓存的,因此得加option设置。

[_userFaceLogo sd_setImageWithURL:[NSURL URLWithString:userDto.userImgUrl] placeholderImage:[UIImage imageNamed:@"head portrait"] options:SDWebImageRefreshCached];

SDWebImageRefreshCached是专门用来处理相同url,图片不同的情况的。

AFNetworking2.0和3.0的区别

3.0之前,底层是通过NSURLConnection来实现的。在3.0之后,也就是在iOS9之后,苹果使用NSURLSession来管理网络请求,弃用了NSURLConnection.

转载于:https://www.cnblogs.com/wuotto/p/9805004.html

你可能感兴趣的文章
语句- for () 循环语句-迭代法
查看>>
jQuery.动画
查看>>
suoi16 随机合并试卷 (dp)
查看>>
五 : springMVC拦截器
查看>>
数据结构七大排序
查看>>
你真的了解iOS的深浅拷贝吗?
查看>>
对症下药,找到Visual Studio每次编译都提示不是最新的根本原因
查看>>
19 反射
查看>>
MTK Android Driver :Camera
查看>>
Servlet含义与工作原理
查看>>
内容页访问母版页页控件的方法
查看>>
BZOJ4825 单旋
查看>>
博客搬家到https://laowei.wang
查看>>
hdu 2196 Computer(树形DP)
查看>>
Django生命请求周期
查看>>
深入Asyncio(十二)Asyncio与单元测试
查看>>
python正则实现简单计算器
查看>>
网络状况判断
查看>>
SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
查看>>
SQL Server 更改隔离级
查看>>