我想从文件系统将一些图像加载到我的应用程序中.有两种简单的方法可以做到这一点:
[UIImage imageNamed:fullFileName]
Run Code Online (Sandbox Code Playgroud)
要么:
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
[UIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)
我更喜欢第一个,因为它的代码少得多,但是我看到有些人说图像被缓存了,而且这个方法使用了更多的内存?由于我不相信大多数其他论坛上的人,我想我会在这里问这个问题,是否有任何实际的区别,如果是的话哪个更"好"?
我尝试使用对象分配工具分析我的应用程序,我看不出任何实际差异,虽然我只在模拟器中尝试过,而不是在iPhone本身上.
我注意到内存激增,仪器中列出的负责调用者是img_data_lock和负责的库CoreGraphics.
我一直在读这个问题与缓存与未缓存的图像加载有关([UIImage imageNamed ...]和[UIImage imageWithData ...]之间的差异?)目前我的应用程序通过以下方式加载一系列图像imageNamed
替换imageNamed呼叫imageWithContentsOfFile似乎解决了这个问题.
有没有人有关于img_data_lock调用者的任何信息?如果有人imageNamed对内存造成这样的损失,为什么会有人使用?