“有自制力的人,才配谈自由。”
SDWebImage的内部实现原理
SDWebImage的内部实现原理
之前刚开始做iOS开发的时候,一直以为SD就仅仅是单纯的为UIImageView赋网络图片的一个第三方库, 直到查阅多方资料, 并且看了源码以后, 才发现他不仅仅是赋值, 还做了更多的操作, github的UML图画的也很清晰, 越来越佩服作者了, 设计思路非常清晰.
下面以setImageWithUrl这个方法为入口, 展示了SD内部做的一些操作,对新手特别友好,能快速了解SD的内部原理:
- 入口setImageWithUrl:placeHolderImage:options:会把placeHolderImage显示,然后SDWebImageManager根据URL开始处理图片.
- 进入SDWebImageManager-downloadWithURL:delegate:options:userInfo:交给SDImageCache从缓存查找图片是否已经下载queryDiskCacheForKey:delegate:userInfo:
- 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate回调imageCache:didFineImage:forKey:userInfo:到SDWebImageManager.
开发者必备的API文档下载和浏览工具
今天分享的这个软件叫Dash, 这是Mac上的开发者必备的API文档下载和浏览工具,有了Dash,再也不用到处找API文档了,内置了丰富的API文档,可以在线下载各种开发API和文档资料,同时还有免费的iOS客户端,Dash让我们集中管理API文档,包括离线下载、搜索、查阅,包括各种主流的编程语言和框架,如Cocos2D, Cocos3D, Corona, CSS, HTML, Java, JavaScript, jQuery, Kobold2D, Lua, 不需要我们再去到处下载 API 文档,Dash 已经自动集成了,并支持集成到XCode、Alfred等软件中,非常的强大!
SDWebImage-SDWebImageOptions
//失败后重试 SDWebImageRetryFailed = 1 << 0,
//UI交互期间开始下载,导致延迟下载比如UIScrollView减速。 SDWebImageLowPriority = 1 << 1,
AFNetworking内存泄露问题
利用Xcode内存监测工具, 经常会看到AFN的内存泄露问题, 苦于找不到解决方案, 后来翻看源码, 又百度了一波, 才找到原因:
NSURLSession 里面有这两个方法:
- invalidateAndCancel失效(取消未完成任务)
- finishTasksAndInvalidate(允许任务完成之前无效的对象)
UILabel高度计算不准确
1.使用boundingRectWithSize:计算时传入的相关属性与实际显示的 UILabel 属性不一致,例: @{NSFontAttributeName:[UIFont systemFontOfSize:16]},计算时传入的字体大小为16,实际显示的大小为17;这里字体只是个例子,明眼人都知道,可是往往忽略的还有 lineBreakMode ,alignment等等;
- 解决方法:使用 NSMutableParagraphStyle 设置相关属性
iOS面试题-网络题
- App 网络层有哪些优化策略?
- TCP为什么要三次握手,四次挥手?
- 对称加密和非对称加密的区别?分别有哪些算法的实现?
- HTTPS的握手流程?为什么密钥的传递需要使用非对称加密?双向认证了解么?
- HTTPS是如何实现验证身份和验证完整性的?
- 如何用Charles抓HTTPS的包?其中原理和流程是什么?
- 什么是中间人攻击?如何避免?