有没有办法清除UIImage类使用的caching?
众所周知,使用imageNamed:
方法加载图像时,UIImage会caching其图像数据。
从苹果文档: https : //developer.apple.com/documentation/uikit/uiimage/1624146-imagenamed
imageNamed:
讨论 :此方法在系统caching中查找具有指定名称的图像对象,并返回该对象(如果存在)。 如果匹配的图像对象不在caching中,则此方法从指定的文件加载图像数据,将其caching ,然后返回结果对象。
因此,在用imageNamed:
加载几个图像之后imageNamed:
我注意到内存使用量的大量增加,并且即使在加载图像的控制器被解除分配之后内存仍被保持使用。 (至less在我分配同一个控制器的时候没有再增加)
这让我想知道是否有任何方法可以在应用程序生命周期的任何给定时间以编程方式清除UIImage使用的caching,甚至控制一些caching参数(例如,可以使用的最大内存)
我知道我可以通过使用initWithData
, imageWithData
, imageWithContentsOfFile
或任何其他初始化工具而不是imageNamed
来轻松解决此问题,但是在使用多个图像(如UITableView
内部)时,需要此caching行为。
任何想法如何做到这一点?
编辑:在一些答案之后,我只是想说清楚,需要做某件事情和有可能做某事之间有巨大的差距。 正如我所指出的那样,我知道操作系统为我处理caching,我只是想看看iOS SDK所施加的限制。
我不知道手动清除此iOS托pipecaching。 一般来说,这是一个红鲱鱼。 当os为你pipe理一些东西时,你不需要担心。 只要你正确地释放任何你分配/保留和处理内存警告适当的你做你的一部分。
答复取自凯文低评论
如果您可以使用私有API (例如,在仅适用于AdHoc的应用程序中),则使用此UIImage
方法从caching中删除所有图像
[UIImage _flushSharedImageCache];
caching将在需要时清空,即应用程序收到低内存警告时。 你没有理由自己做这个,也没有可用的公共API。