Как указано в API-интерфейсе UIImage :
+ (UIImage *) imageNamed: (NSString *) name
Этот метод ищет в системных кэшах объект изображения с указанным именем и возвращает этот объект, если он существует. Если соответствующий объект изображения еще не находится в кэше, этот метод загружает данные изображения из указанного файла, кэширует его и затем возвращает полученный объект.
+ (UIImage *) imageWithContentsOfFile: (NSString *) путь
Этот метод не кэширует объект изображения.
Итак, мы можем видеть, что если у вас много одинаковых элементов пользовательского интерфейса (таких как UITableViewCell), которые могут использовать одно и то же изображение (часто как icons ), и из-за Производительность, конечно, мы хотим повторно использовать то же изображение , чтобы сэкономить память для другого использования. В общем случае повторно используемое изображение часто используется в элементе пользовательского интерфейса, который может использоваться нашим пользователем много раз . Поэтому нам важно использовать его повторно. Поэтому вы можете выбрать метод imageNamed .
А с другой стороны, в приложении будет существовать некоторый элемент интерфейса пользователя , который будет присутствовать в течение жизненного цикла приложения, такой как кнопка, представление логотипа, поэтому эти изображения используются Элементы пользовательского интерфейса также могут присутствовать в течение жизненного цикла приложения, вы не будете учитывать, должно ли это изображение быть в кеше или нет. Поэтому вы можете выбрать метод imageNamed .
Напротив, в приложении часто существуют Элементы пользовательского интерфейса , которые создаются динамически. Например, наше приложение поддерживает динамический фон , так что пользователь может выбрать понравившийся фон. И background может быть изображением. Таким образом, у нас может быть интерфейс, который перечисляет множество различных background (часто показывается с помощью UIImageView ) для выбора пользователем, мы можем назвать представление списка MyBackgroundListView . Таким образом, когда пользователь выбирает фон image , MyBackgroundListView должен быть уничтожен, поскольку он завершает свою функцию. В следующий раз, когда пользователь захочет изменить свой фон, мы можем снова создать MyBackgroundListView . images используется MyBackgroundListView не должно кэшироваться, иначе память нашего приложения исчерпает себя. Так что на этот раз вы должны использовать
imageWithContentsOfFile метод.
Как документ от Apple Поддержка экранов с высоким разрешением в представлениях говорит
На устройствах с экранами высокого разрешения методы imageNamed: , imageWithContentsOfFile: и initWithContentsOfFile: автоматически ищет версию запрошенного изображения с модификатор @ 2x в его названии. Если он находит его, он загружает это изображение вместо этого. Если вы не предоставите версию данного изображения с высоким разрешением, объект изображения все равно загружает изображение стандартного разрешения (если оно существует) и масштабирует его во время рисования.
так что вы будете беспокоиться о пути поиска изображения для проблемы с экраном сетчатки. IOS поможет вам справиться с этим.
Извините за мой плохой английский. Пусть это будет полезно.