by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 11:09
    kinarobin closed #3054
  • 05:25
    arslan311 edited #3059
  • 05:22
    arslan311 opened #3059
  • Aug 02 09:34
    mahadshahib opened #3058
  • Aug 01 08:26
    stale[bot] labeled #2928
  • Aug 01 08:26
    stale[bot] labeled #3022
  • Jul 31 10:35
    yyhinbeijing edited #3056
  • Jul 31 03:41
    yyhinbeijing edited #3057
  • Jul 31 03:41
    yyhinbeijing edited #3057
  • Jul 31 03:40
    yyhinbeijing edited #3057
  • Jul 31 03:40
    yyhinbeijing edited #3057
  • Jul 31 03:39
    yyhinbeijing opened #3057
  • Jul 31 03:05
    yyhinbeijing edited #3056
  • Jul 29 09:51
    yyhinbeijing edited #3056
  • Jul 29 09:48
    yyhinbeijing opened #3056
  • Jul 29 09:00
    dreampiggy unlabeled #2963
  • Jul 29 05:09
    stale[bot] labeled #2963
  • Jul 25 16:20
    dreampiggy labeled #3055
  • Jul 25 16:20
    dreampiggy labeled #3055
  • Jul 25 16:20
    dreampiggy closed #3055
Lee0820
@Lee0820
昨天那个demo,一直涨的问题您这边有debug吗 ~
DreamPiggy
@dreampiggy
我今天或明天抽空看一下,有Full Time Job有时会忙
Lee0820
@Lee0820
好的,辛苦了,感谢
DreamPiggy
@dreampiggy
这样吧,这个问题有一个优化点,就是目前各个SDAnimatedImageView都是独立的,Player也是独立的,各自有一个frame cache limit,但是总数可能会很高,导致频繁触发DidReceiveMemoryWarning。虽然理论上不会Crash(因为一旦触发立即销毁了,这个销毁是block main queue同步进行的而非异步)。但是按照你的意思想更精确控制消耗
可能需要对全局的Player的内存占用做一个管理,或者更激进的,对所有通过SDImageCodersManager的触发解码/编码的调用,做内存管理
一直以来忘记这个事情了
Lee0820
@Lee0820
具体现在怎么操作,通过设置 SDAnimatedImageView 的 maxBufferSize来处理吗?
Lee0820
@Lee0820
目前有当 SDAnimatedImageView 销毁的时候能情况它图片占用的内存吗?
DreamPiggy
@dreampiggy
frame cache是SDAnimatedImageView的一个属性,字典,当然销毁……
除非你在Decoder级别做了缓存,有一个叫做preloadAllFrames的options,看那个说明
额,5.7以后是SDAnimatedImagePlayer,其实代码就是移动过去的
Lee0820
@Lee0820
目前用SDAnimatedImageView加载gif,设置了maxBufferSize还是内存暴涨,我看SDAnimatedImageView delloc方法执行了,但是内存没释放 ~
DreamPiggy
@dreampiggy
那就说明这个内存不是帧缓存占据的内存
帧缓存是绑定到ImageView上的,不是SDAnimatedImage上,也不会存入SDImageCache,对吧
xiaoxiaoyingqian
@xiaoxiaoyingqian
9A95F0C8-E549-4561-9D45-F545DE013B3E.png
发现5.x版本一个崩溃,出现概率较高
DreamPiggy
@dreampiggy
按照模版发一下场景,iOS版本,Xcode版本,SDWebImage版本,机型,复现概率
看堆栈像是系统ImageIO库线程不安全?
xiaoxiaoyingqian
@xiaoxiaoyingqian

Issue Info

Info Value
Platform Name ios
Platform Version 13.1.3
SDWebImage Version e.g. 5.0.0 / 4.4.0
Integration Method cocoapods
Xcode Version Xcode 11.3.1
Repro rate unknown
Repro with our demo prj
Demo project link
我们最近准备从4.x切换到5.x,然后我这边直接真机联调截断就发现了3次左右这种情况,我怀疑是ImageIO库非线程安全的问题,但是好像查了下,这个api有说是线程安全的
DreamPiggy
@dreampiggy
具体SDWebImage的版本号
DreamPiggy
@dreampiggy
不清楚是不是有一些内部机制修改。这里的CGImageSourceCreateImageAtIndex,先手动会本地构造的NSMutableDictionary进行一次copy操作吧(之前测试是无所谓的)。
image.png
xiaoxiaoyingqian
@xiaoxiaoyingqian
5.8.3
DreamPiggy
@dreampiggy
你建立一个Issue吧,或者我拷贝过来
DreamPiggy
@dreampiggy
@xiaoxiaoyingqian Please have a try with v5.8.4 version.