首页
学习
活动
专区
圈层
工具
发布

iOS 图片加载框架SDWebImage详解

目的 在使用SDWebImage加载图片时,尤其是加载gif等大图时,SDWebImage会将图片缓存在内存中,这样是非常吃内存的,这时我们就需要在适当的时候去释放一下SDWebImage的内存缓存,才不至于造成...使用回调 blocks 在 block 中得到图片下载进度和图片加载完成(下载完成或者读取缓存)的回调,如果你在图片加载完成前取消了请求操作,就不会收到成功或失败的回调 [cell.imageView...:使用 UITableViewCell 中的 imageView 加载不同尺寸的网络图片时会出现尺寸缩放问题。...问题 2:图片刷新问题:SDWebImage 在进行缓存时忽略了所有服务器返回的 caching control 设置,并且在缓存时没有做时间限制,这也就意味着图片 URL 必须是静态的了,要求服务器上一个...解决方案:在调用 sd_setImageWithURL: placeholderImage: options:方法时设置 options 参数为 SDWebImageRefreshCached,这样虽然会降低性能

3K10

Swift-MVVM 简单演练(四)

如果一个类没有任何父类,在开发时需要输出调试信息,需要遵守如下规则: 遵守CustomStringConvertible协议 实现description方法 class HQStatusViewModel...1)" memberIcon = UIImage(named: imageName) } } 然后再回到自定义的HQACellTopView中设置会员图标...关于性能的一点探讨 之前在didSet方法中设置时,如果是表格,每次滚出屏幕再滚动回来的时候都要重新执行didSet方法,重新计算。不断的消耗CPU。一定会多多少少影响一点性能的。...(-1:没有认证, 0:认证用户, 2,3,5:企业认证, 220:达人) var vipIcon: UIImage在HQStatusViewModel中根据返回数据verified_type类型来设置...hq_rectImage(size: memberIconView.bounds.size) } } 在Color Blended Layers效果如下 在Color Misaligned

2.7K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SDWebImage源码阅读-第一篇

    我们从最常见的入口切入sd_setImageWithURL,一路下去,最后再阅读没有设计到的部分。   在开始之前强烈建议先去读我之前的文章:最新版SDWebImage的使用。...我们先来看看UIImageView+WebCache中的基本方法:   在UIImageView+WebCache类的最上面,很贴心的贴了一个使用例子,这也是我们很常见的tableViewCell加载图片的场景...在SDWebImageManager的downloadImageWithURL方法中创建operation并返回,保存在operationDictionary中。...并将下载的所有operation从operationDictionary中移除。...答案是:objc_setAssociatedObject,对象关联,动态的给UIImageView添加新属性。在SDWebImage中有很多这种用法,看到你就要知道,这就是动态增加了属性。

    957120

    iOS_UITableView性能优化

    // 提前计算并缓存好高度 // 滑动时按需加载, 防止卡顿 配合SDWebImage https://github.com/johnil/VVeboTableViewDemo dispatch_async...UITableViewAutomaticDimension; // --------   离屏渲染: 圆角/阴影   -------- // 离屏渲染: 圆角/阴影, 另外开辟渲染缓冲区, 消耗性能 (多: 缓冲区频繁合并 上下文频繁切换, 导致掉帧) UIImageView...*imgV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"placeholder"]]; imgV.frame = CGRectMake...]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; // 设置大小 maskLayer.frame = imgV.bounds; // 设置图形样子...*indexPath in visiblePaths) { // 获取dataSource里的对象, 并且判断加载完成是不需要再次异步加载         }     } return cell

    1K20

    ·第三方网络图片处理框架:SDWebImage(官方文档翻译篇)

    注意:仍然有一个向后兼容的功能,所以如果你仍然试图用UIImageView加载一个GIF,它将只显示第一帧作为静态图像。...这意味着您的图像URL是指向永远不会改变的图像的静态网址。如果指向的图像发生变化,则网址的某些部分应当相应更改。 如果您无法控制您正在使用的图像服务器,那么当内容更新时,您可能无法更改该URL。...安装 ---- 在您的项目中使用SDWebImage有三种方法: 使用CocoaPods 使用Carthage 通过将项目复制到您的存储库中 10.1 使用CocoaPods安装 CocoaPods是Objective-C...并将目标设置为iOS 8+: platform :ios, '8.0' use_frameworks!...在需要使用库的源文件中,导入头文件: #import UIImageView+WebCache.h> 10.5 构建工程 到这里,您的workspace应该能没有错误地被构建。

    4.7K20

    RunLoop总结:RunLoop的应用场景(三)滚动视图流畅性优化

    有一个非常好的关于设置图片视图的图片,在RunLoop切换Mode时优化的例子:RunLoopWorkDistribution 先看一下界面布局: ?...下面举例说明: 1.在主线程中做耗时操作 耗时操作,包括从网络下载、从网络加载、从本地数据库读取数据、从本地文件中读取大量数据、往本地文件中写入数据等。...(这一点,相信大家都知道,要尽量避免在主线程中执行,一般都是创建一个子线程来执行,然后再回到主线程) 2.动态计算UITableViewCell的高度,时间过久 在iOS7之前,每一个Cell的高度,...关于这一点,我以前的做法是在Cell中定义一个public方法,用来计算Cell高度,然后计算完高度后,将高度存储在Cell对应的Model中(Model里定义一个属性来存高度),然后在渲染Cell时,...这样在为Cell各个子控件赋值时,仅仅是取值、赋值,在计算Cell高度时,也仅仅是加法运算。 3.界面中背景色透明的视图过多 为什么界面中背景色透明的视图过多会影响UITableView的流畅?

    2.9K41

    Swift| 基础语法(五)

    } 在Swift中,创建tableViewCell的方法可以分为两种创建tableView时候注册和需要使用时手动创建。先聊聊创建tableView的时候直接注册cell: myTb?....register(MyNewTableViewCell.self, forCellReuseIdentifier: "myCell") 当注册了Cell之后,在没有可重用的Cell时会自动创建,并且不能在需要时手动创建...可以在自定义cell中处理点击状态下的显示 var label1 :UILabel? var label2 :UILabel?...: "") // // 4 选中时的背景图片 // tabbarController.tabBar.selectionIndicatorImage = UIImage(named...因为在Swift中,所有对象的构造器默认都是public,所以需要重写你的init让其成为私有的。 这样就保证像如下的代码编译报错,不能通过。 六、从相册选择照片或者拍照 ?

    3.6K30

    iOS开发之微信聊天页面实现

    在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦。...当点击图片时会跳转到另一个Controller中来进行图片显示,在图片显示页面中添加了一个捏合的手势(关于手势,请参考:iOS开发之手势识别)。...点击播放按钮,会播放录制的音频,cell的大学会根据内容的多少来调整,而cell中textView的高度是通过约束来设置的。 ?   ...55 default: 56 break; 57 } 58 }]; 59 }     3.把聊天工具栏中返回的内容显示在...,在图片显示View中通过捏合手势来调整图片的大小,代码如下: 1 - (IBAction)tapPichGesture:(id)sender { 2 UIPinchGestureRecognizer

    4.7K70

    iOS 性能优化常用技巧总结import

    :indexPath]; 这个方法把那些已经存在的cell从队列中排除,或者在必要时使用先前注册的nib或者class创造新的cell。...Apple在相关文档中的记述是: 当你加载一个引用了图片或者声音资源的nib时,nib加载代码会把图片和声音文件写进内存。...在Image Views中调整图片大小 如果要在UIImageView中显示一个来自bundle的图片,你应保证图片的大小和UIImageView的大小相同。...如果图片是从远端服务加载的你不能控制图片大小,比如在下载前调整到合适大小的话,你可以在下载完成后,最好是用background thread,缩放一次,然后在UIImageView中使用缩放后的图片。...17.正确设定背景图片 在View里放背景图片就像很多其它iOS编程一样有很多方法: 使用UIColor的 colorWithPatternImage来设置背景色; 在view中添加一个UIImageView

    1.3K70

    iOS中播放gif动态图的方式探讨 原

    iOS中播放gif动态图的方式探讨 一、引言     在iOS开发中,UIImageView类专门来负责图片数据的渲染,并且UIImageView也有帧动画的方法来播放一组图片,但是对于gif类型的数据...,UIImageView中并没有现成的接口提供给开发者使用,在iOS中一般可以通过两种方式来播放gif动态图,一种方式是通过ImageIO框架中的方法将gif文件中的数据进行解析,再使用coreAnimation...)getGifImageWithUrk:(NSURL *)url                returnData:(void(^)(NSArrayUIImage *> * imageArray,...动态图方式的优劣     经过测试,从加载速度上来说,通过UIImageView类别加载的方式更加快速,UIWebView的方式加载时间会稍长,但是从性能上来比较,WebView的方式性能更优,播放的gif...在开发中,可以根据需求,适当选择,例如虽然WebView加载的方式性能更好,但是在许多情况下,原生的UIImageView能够更加自由的让开发者进行扩展。

    2.2K20

    【IOS开发基础系列】Storyboard专题

    它要求应用程序在启动时需要加载的故事板文件名。...由于无法从nib中加载应用程序委托,也无法从故事板文件中加载应用程序委托,我们必须告诉UIApplicationMain 应用程序委托类的名称,否则它根本无法找到应用程序委托类。...在以前,如果你要定制表视图单元格,你要么在代码中向cell对象添加自己的 subviews ,要么新建一个 nib 然后从nib 中加载你自己的 cell。...返回MainStoryboard.storyboard,在TableView的 Size 面板中,将 Row Height 设置为55。         ...3 设计原则 3.1 布局设计原则 3.1.1 一个控件的布局尽量只采用一种方式,要么是Storyboard(XIB)要么是代码         因为视图在刷新时,会直接从Storyboard中加载控件的大小

    3.8K30
    领券