Comme le référence de l'API UIImage le dit :
+(UIImage *)imageNamed:(NSString *)name
Cette méthode recherche dans les caches système un objet image avec le nom spécifié et renvoie cet objet s'il existe. Si un objet image correspondant n'est pas déjà dans le cache, cette méthode charge les données de l'image depuis le fichier spécifié, les met en cache, puis renvoie l'objet résultant.
+(UIImage *)imageWithContentsOfFile:(NSString *)path
Cette méthode ne met pas en cache l'objet image.
Ainsi, nous pouvons voir que si vous avez beaucoup des mêmes éléments UI (comme UITableViewCell) qui peuvent utiliser la même image (souvent comme des icônes), et en raison des performances, bien sûr nous voulons réutiliser la même image, afin d'économiser de la mémoire pour d'autres utilisations. Généralement, l'image réutilisée est souvent utilisée dans l'élément d'interface utilisateur sur lequel notre utilisateur peut effectuer beaucoup de fois. Donc il est important pour nous de la réutiliser. Vous pouvez donc choisir d'utiliser la méthode imageNamed.
D'autre part, dans une application, il y aura certains éléments d'interface utilisateur qui seront là pendant le cycle de vie de l'application, comme un bouton, une vue de logo, donc ces images utilisées par ces éléments d'interface utilisateur peuvent également être là pendant le cycle de vie de l'application, vous ne vous demanderiez pas si ces images doivent être mises en cache ou non. Vous pouvez donc choisir d'utiliser la méthode imageNamed.
Par contre, dans une application, il y a souvent certains éléments d'interface utilisateur qui sont créés dynamiquement. Par exemple, notre application supporte un fond d'écran dynamique, afin que l'utilisateur puisse choisir le fond d'écran qu'il aime. Et le fond d'écran peut être une image. Donc nous pouvons avoir une interface qui liste beaucoup de différents fonds d'écran (souvent affichés par une utilisation de UIImageView) pour que l'utilisateur choisisse, nous pouvons nommer la vue de liste MyBackgroundListView. Donc une fois que l'utilisateur choisit un fond d'écran, le MyBackgroundListView devrait être détruit, car il a terminé sa fonction. La prochaine fois que l'utilisateur souhaite changer son fond d'écran, nous pouvons recréer MyBackgroundListView. Donc les images utilisées par MyBackgroundListView ne devraient pas être mises en cache, sinon la mémoire de notre application sera épuisée. Cette fois, vous devriez utiliser la méthode imageWithContentsOfFile.
Comme le dit la documentation d'Apple Prise en charge des écrans haute résolution dans les vues
Sur les appareils avec des écrans haute résolution, les méthodes imageNamed:, imageWithContentsOfFile:, et initWithContentsOfFile: recherchent automatiquement une version de l'image demandée avec le modificateur @2x dans son nom. Si elle en trouve une, elle charge cette image à la place. Si vous ne fournissez pas une version haute résolution d'une image donnée, l'objet image charge quand même une image à résolution standard (si une existe) et la met à l'échelle pendant le dessin.
Vous devriez donc vous inquiéter du problème du chemin de recherche de l'image pour les écrans Retina. IOS vous aidera à gérer cela.
Désolé pour mon mauvais anglais. Peut-être utile.