首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
跳入西湖
掘友等级
iOS
认认真真做事,不要想乱七八糟的
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
130
文章 130
沸点 0
赞
130
返回
|
搜索文章
跳入西湖
iOS
·
2天前
举报
#每天一个知识点#
当我们在谈论图片解码的时候,我们在谈什么?
我们常见的图片 PNG JPEG 文件,实际上是压缩过的,为了减少空间占用和带宽消耗嘛。
那么屏幕要显示这些图片就必须经过解压,拿到完整的位图数据(像素数组,每个元素代表图片上的一个点)。
在 iOS 开发中呢,解码分四步走:
1. 根据 NSData 对象(从文件读取生成)创建一个 source 对象,source 是待解码数据的输入,解码的过程都是通过它来完成
2. 从 source 中读取图像信息,比如图像格式、元信息等,下一步解码要用
3. 调用解码库解码 source,苹果自带的就是 ImageIO,接口是CGImageSourceCreateImageAtIndex,得到一个 CGImageRef
4. 根据解码后的数据生成 UIImage,它是可以显示的图像对象。释放资源
动态图片的解码也差不多,只是将一帧帧图片都解码生成 UIImage,后面再把所有 UIImage 合并生成一个 AnimatedImage(还是 UIImage 类型)
第三方解码器解码的过程又有所不同,就是不用 source 了,重点放在 BitMap 的获取上
1. 先获取到图像的 BitMap 数据(像素数组)
2. 根据 BitMap 生成 CGImage 数据
3. 重绘。把 CGImage 绘制到一个上下文里,这一步是因为CALayer 和 UIImageView 渲染的时候要求的色彩限定,为了减少渲染消耗和内存消耗,这里重新绘制一波
4. 然后根据上下文 context 生成 UIImage。(当然,也要清理资源)
展开
客户端开发
分享
评论
点赞
跳入西湖
iOS
·
3天前
举报
SDWebimage 如何设计缓存?
memory + disk 内存+磁盘双缓存。
获取图片前先查找这两个缓存里有没有,内存里没有就去磁盘找,磁盘里没有才下载,如果磁盘里有,那么就会把磁盘缓存 copy 到内存缓存 _syncDiskToMemoryWithImage
什么时候添加缓存?
图片下载后,根据缓存策略(默认是都存)
把 UIImage 存到NSCache 中
同时也会把压缩格式的 图片存到本地沙盒
什么时候清理缓存?
内存:收到内存预警时,删除所有内存
磁盘:App 退出或者进入后台时,会检查当前缓存是否超出了maxDiskSize (默认无限额,需要开发者手动设置),或者存储的缓存数据是否过期(保质期默认 7 天 kDefaultCacheMaxDiskAge)。如果超出了,那也不是删除全部,而是把图片删除到 maxDiskSize 的一半
很合理,收工的时候清理一下,还手机一个干净整洁的空间
(真的很舒服啊 SDWebimage 的源码看着,虽然看不太懂,但是整洁、齐全、有注释,结构合理)
#每天一个知识点#
展开
客户端开发
赞过
分享
评论
3
跳入西湖
赞了这篇文章
有梦想的程序员
iOS
·
2年前
关注
了解 SDWebImage 框架
SDWebImage 在开发中经常使用,用久了就想看看大佬们是怎么实现的,本文就是对源码调用过程的一个探索。...
9
评论
分享
跳入西湖
赞了这篇文章
sweet丶
iOS工程师 @货拉拉-小拉出行
·
9月前
关注
SDWebImage的图片解码源码阅读
SDWebImage中对下载完的图片在子线程解码后才放到ImageView中显示,这避免了系统在主线程解码而导致的卡顿问题,本文主要解读图片解码时做了哪些事情及如何显示gi...
1
评论
分享
跳入西湖
赞了这篇文章
陈满iOS
iOS Developer
·
5年前
关注
iOS复习和面试中有关SDWebImage可能知识点总结(1)
1. SDWebImage内部实现原理步骤 2. 最大缓存和时间设置 3. 区分:三种种缓存(内存图片缓存,磁盘图片缓存,内存操作缓存) 磁盘缓存是通过 NSFileMan...
241
9
分享
跳入西湖
iOS
·
6天前
举报
多线程中的栅栏 barrier 是什么?
先说点背景知识,iOS 开发中经常会用队列来调度 block 的执行,并发队列支持多个 block 同时执行(只要开多几个线程),串行队列让 block 只能一个一个执行,一个 block 执行完,另一个 block 才能开始。
栅栏函数就是用在并发队列中的,为的就是在并发队列中拿一点先后顺序。因为栅栏函数分配的 block A,会等这个队列中其他 block 执行完,然后到 blockA 单独执行,它执行完,然后才是队列其他中排在它后面的 block 执行。
这就相当于在无序的并发队列中拿到了一点「顺序」。
这么做的原因就是最大程度利用系统性能,顺序不敏感的 block 直接放进去,开多几个线程一起执行,对顺序有要求的 block 我就用栅栏函数放进去
图为 AFNetworking 图片下载器中添加图片缓存的逻辑,就用到了 barrier 来保证「添加图片」和「删除图片」的先后顺序
#每天一个知识点#
展开
收起
查看大图
向左旋转
向右旋转
客户端开发
赞过
分享
评论
2
跳入西湖
关注了
i_erlich
iOS
跳入西湖
关注了
長茳
iOS
跳入西湖
关注了
iOS新知
iOS
跳入西湖
关注了
皮拉夫大王在此
iOS
跳入西湖
关注了
梦回吹角连营
iOS
跳入西湖
iOS
·
3月前
关注
Unity 中的预制体 Prefeb 和 模型 FBX
Unity 中的预制体和模型,在创建一个角色实例时,需要考虑使用的是哪一个,如果想对多个实例进行操作,那么最好是一开始就创建一个预制体,修改预制体就能修改多个实例...
赞
评论
分享
跳入西湖
赞了这篇文章
王先生技术栈
程序员鼓励师 @菜鸡日常划水
·
4月前
关注
关于鸿蒙开发,我暂时放弃了
起因 在最近鸿蒙各种新闻资讯说要鸿蒙不再兼容android之后,我看完了鸿蒙视频,并简单的撸了一个demo。 # 鸿蒙HarmonyOS从零实现类微信app效果第一篇,基础...
543
601
分享
跳入西湖
iOS
·
4月前
关注
🔥Unity 导入素材为粉色?我用一个插件轻松解决
哈喽大家好哇!我是跳入西湖,最近在做 John Lemon 项目,学学游戏开发 在导入相关的素材时,发现角色是粉色的(其实是洋红色),一开始我还以为就是这样的,直到我后来创...
赞
评论
分享
跳入西湖
iOS
·
4月前
关注
🔥我在 2023 年做了一遍 John Lemon 项目之环境搭建(Mac,VSCode,Unity)
Mac 电脑搭建 Unity 用 VSCode 进行脚本编辑的环境,期间碰到了很多问题,官方教程并不能解决疑惑,通过摸索最终成功搭建了有代码提示的 VSCode 编辑环境...
赞
评论
分享
跳入西湖
关注了
王中阳Go
iOS
跳入西湖
赞了这篇文章
王中阳Go
🏅掘金签约作者 @程序员升职加薪之旅
·
6月前
关注
30岁程序媛求职路复盘:文转码+失业半年+PHP如何涨薪5K的!?
这篇文章写于下班路上,刚刚入职不久,我想再冲刺一下大厂,阳哥建议我坚持总结打卡,可以尝试写写博客。那我就从这篇开始吧,希望开个好头!...
24
12
分享
跳入西湖
赞了这篇文章
寻找奶酪的mouse
@👑攻粽耗:寻找奶酪的mouse
·
5月前
关注
一年空窗期后我是如何准备面试的?
前前后后从准备到上岸历时一个半月,今天从三个方面分享这个过程我做了什么? 心态 做事情之前,心态很重要,我遇事很少否定自己,在我看来,别人可以做到的,自己也可以,虽然一年空...
151
69
分享
跳入西湖
赞了这篇文章
果哥爸
iOS资深开发工程师
·
4月前
关注
iOS 仿花小猪首页滑动效果
一. 背景 首页改版,想要做一个类似花小猪首页滑动效果,具体如下所示: 二. 分析 从花小猪首页交互我们可以分析出如下信息: 首页卡片分为三段式,底部、中间、顶部。 当首页...
105
10
分享
跳入西湖
赞了这篇文章
iOS新知
资深 iOS 开发工程师
·
5月前
关注
Xcode 有哪些很有用但鲜为人知的技巧?
作为一个 iOS 开发,使用最多的工具毋庸置疑是 Xcode,Xcode 功能非常强大,但是我接触了很多 iOS 开发之后发现有一...
150
27
分享
下一页
个人成就
文章被点赞
80
文章被阅读
12,688
掘力值
491
关注了
20
关注者
23
收藏集
3
关注标签
0
加入于
2021-09-22