Open Reliable-D opened 5 years ago
您好,最近我偶尔遇到播放GIF崩溃。崩溃定位到 step:
方法内 LOCK(
这行代码,提示 EXC_BAD_ACCESS
错误。
LOCK
是线程控制的宏
define LOCK(...) dispatch_semaphore_wait(self->_lock, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \ dispatch_semaphore_signal(self->_lock);
应该是子线程里访问了不存在的image地址。请问能否指教下如何解决这个问题?
您好,最近我偶尔遇到播放GIF崩溃。崩溃定位到
step:
方法内LOCK(
这行代码,提示EXC_BAD_ACCESS
错误。LOCK
是线程控制的宏define LOCK(...) dispatch_semaphore_wait(self->_lock, DISPATCH_TIME_FOREVER);
VA_ARGS; dispatch_semaphore_signal(self->_lock);
应该是子线程里访问了不存在的image地址。请问能否指教下如何解决这个问题?
图片缓存逻辑是YYImage内部直接处理掉了。野指针的问题是否是外部操作了图片?感觉由YYImage导致的可能性比较小
应该是我在动画播放时把 YYAnimatedImageView
移除了,现在我在移除前先停止动画播放。
YYAnimatedImageView会少播放一遍动画
背景:
问题步骤:
期望:
结果:
初步调查结果:
YYAnimatedImageView的
step:
方法有一个_bufferMiss字段用来标记是否有缓存帧。 有nextIndex字段用来标记下一张图的index。当nextIndex为0时,当前的loopCount会加1,具体代码为(_curLoop++; YYAnimatedImageView.m 481 line
),通过_curLoop+1
最终实现loopCount播放机制但前后台切换再回到前台。因为之前已播放完毕过,所以_bufferMiss == NO 且 nextIndex == 0。因此,图片刚回到前台进入
step:
方法,就会进入到_curLoop++;
。导致的结果是:loopCount少运行一次,进而产生只播放了一遍动画的问题。以上是我个人的一些初步的调查。但因项目准备集成YYImage,正在寻找一些work around或者作者能否抽空帮忙看一下。非常感谢!!!