Swift 4正确移除面膜

时间:2018-12-04 20:27:53

标签: ios swift image-masking

我有一个滚动视图,其中包含保存在数组中的多个UIImageViews。每个UIImageViews具有相同的背景图像,但是具有唯一的蒙版。当这些图像未显示在屏幕上时,我想取下遮罩以节省内存。当必须创建或删除掩码时,将调用以下函数。但是,在这种情况下,当imageView遮罩设置为nil时,内存占用将减少。

Warning: Failed prop type: Component must be a valid element type!
        in WrapperComponent

如何解决这个问题?作为初学者,我一直在寻找答案的日子,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

代码中最大的对象是用作UIImageView的image的UIImage(用作遮罩)。 (UIImageView本身可以忽略不计。)通过说UIImage(named:)加载的UIImage是 cached ;因此,删除UIImageView不会导致内存减少。但是好消息是,下次执行此操作时,图像已被缓存,因此内存也不会增加。

还请注意,如果UIImage很大,则即使您将其显示为小(即,如果使UIImageView进行将UIImage大小减小到其自身大小的工作),其内存也将很大。那是巨大的内存浪费。有一些标准技术可以按照显示所需的实际大小加载或重绘UIImage,从而可以节省大量内存。

答案 1 :(得分:0)

请注意,UIImage(named:)的文档指出它确实缓存了它加载的图像。因此,除非收到内存警告,否则取消映像设置不会减少内存消耗。图像仍在缓存中。如果您真的不想缓存,请使用其他不缓存的初始化方法之一,例如init(data :)或init(contentsOfFile:)。