我读到了使用 imageNamed: 初始化图片是不好的,但是最好的方法是什么呢?我正在使用 imageWithContentsOfFile: 并传递资源文件夹中图像的路径。
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"jpg"]
这个调用在一个for循环中被执行了大约30次。
现在当我使用instruments运行我的应用程序时,我发现很多内存被NSString所占用,比如上面的操作,我们使用字符串字面量(@"jpg")。 Instruments显示责任调用者为[NSBundle mainBundle],这又指向了当我使用字符串字面量作为类型时的那一行。
那么初始化图像的最有效方法是什么,而不会使用太多的内存呢?
我把语句改成了
img = [UIImage imageWithContentsOfFile:[bndl pathForResource:fileName ofType:extn]]
其中extn
是静态的并初始化为@"jpg"
。fileName
在for循环的每次迭代中都会改变。但即使如此,根据Instruments的数据显示,[NSBundle mainBundle]
和[NSBundle pathForResource:OfType:]
仍然是NSString
最常用的方法。
imageWithContentsOfFile
或initWithContentsOfFile
来加载图像,而不是分配NSData然后从中加载UIImage?这三种方法中哪一种更快,占用内存更少(更有效)?请发表您的评论。 - rohan-patel-imageWithContentsOfFile:
会生成自动释放的对象。这是我们试图避免的一件事情。-initWithContentsOfFile:
可能是一个更好的方法,但当时可能我已经进行了基准测试并发现其表现不佳。这是我首先需要分析的事情。 - Brad LarsonimageWithContentsOfFile:
可能更有效。 - rohan-patel