大家可以看一下下面两段代码(图1和图2)

如果已经显示了一张沙盒里的图片,这个时候对相同路径的文件进行修改和删除,通常我们认为_imageView应该不受到影响,因为图片已经完成渲染,但事实并非如此,_imageView竟然会跟着发生变化,并且变化的结果也是不可预期的,比如说删除对应的路径的文件,_imageView可能全部黑屏或者一些黑屏,如果不想因为后续操作而影响_imageView的显示,那么就需要用NSData中转一下(图3)。

对于不需要及时删除图片或者修改图片路径的情况,建议在dispath_asyn到main queue里执行图片删除或者文件更改工作,因为此时图片已经完成渲染,再进行删除或者修改操作就没问题了

是不是感觉有点怀疑人生?在WWDC 2018 Lab中我咨询了相关的苹果工程师,结果是为了性能,内部会有一些同步机制。以后大家遇到这样的问题可以参考一下。