Я читал, что imageNamed: плохо при попытке инициализировать изображения. Но тогда лучший способ? Я использую imageWithContentsOfFile и, проходя путь изображения в моей папке ресурсовiPhone - Самый эффективный способ памяти для инициализации изображения?
[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"jpg"]
Этот вызов производится около 30 раз в цикле.
Теперь, когда я запускаю свое приложение с помощью инструментов, я вижу, что NSString использует большую память для операций, подобных описанным выше, где мы используем строковые литералы (@ "jpg"). Приборы показывают ответственного абонента как [ NSBundle mainBundle], и это, в свою очередь, указывает на строку, когда я использую строковый литерал для типа.
Итак, каков наиболее эффективный способ инициализации изображений без использования слишком большой памяти?
Я изменил заявление
img = [UIImage imageWithContentsOfFile:[bndl pathForResource:fileName ofType:extn]]
где extn
статична и инициализируется @"jpg"
. fileName
постоянно меняется для каждой итерации цикла for. Но даже тогда максимальное использование NSString
связано с [NSBundle mainBundle]
и [NSBundle pathForResource:OfType:]
согласно приборам.
Брэд, у меня есть запрос: вместо распределения NSData и загрузки UIImage из него мы не можем напрямую использовать 'imageWithContentsOfFile' или' initWithContentsOfFile' для загрузки изображения? Какой из этих 3 методов будет быстрее, меньше потребляемой памяти (эффективной)? Ваш комментарий пожалуйста. –
@ rohan-patel - Прошло четыре года с момента ответа, поэтому я не уверен, почему я решил сделать это специально, но '-imageWithContentsOfFile:' будет генерировать объекты с автореализацией. Это одна вещь, которую мы пытались избежать здесь. '-initWithContentsOfFile:' мог бы быть лучшим подходом, но я, возможно, сравнивал это и обнаружил, что он близок к тому времени. Это то, что я сначала проработал. –
Спасибо за ваш комментарий. Если мы думаем в общем контексте (забывая об этом сценарии цикла), что было бы более эффективным? Я думаю, что 'imageWithContentsOfFile:' может быть эффективным. –