Question

J'utilise un grand nombre de CALayers, créant une image basée sur des mosaïques semblable à Google Maps (différentes versions de la même image avec plus / moins de détail).

Le code que j'utilise pour faire ceci est:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
obj.layerToAddTo.contents = [image CGImage];
[CATransaction commit];

Je n'ai pas vraiment envie de charger CGImage à partir d'un fichier avec CoreGraphics car je suis paresseux. Mais je le ferai s'il y a un gros gain de performance! LoadImage modifie simplement une chaîne pour obtenir le bon chemin pour charger ladite image, et obj est une structure NSObject qui contient toutes les informations dont j'ai besoin pour ce fil.

Aide?

Était-ce utile?

La solution

Il n’ya pas d’amélioration significative des performances. En fait, c’est l’inverse. En chargeant UIImage de charger vos images, vous obtiendrez tous les avantages de la mise en cache, ce qui en fait une tâche très rapide à utiliser avec vos différents CALayers.

Autres conseils

Je viens d’essayer cela et utiliser CoreGraphics pur pour charger l’image plutôt que UIImage a permis une amélioration notable de la vitesse lors du chargement de nombreuses images à la fois.

"Je viens juste d'essayer cela et d'utiliser CoreGraphics pur pour charger l'image au lieu d'utiliser UIImage a permis une amélioration notable de la vitesse lors du chargement de nombreuses images à la fois."

Comment avez-vous évité d’utiliser un UIImage? Ou plus précisément, comment charger un fichier image directement dans CoreGraphics sans passer par un UIImage?

Une des raisons pour lesquelles NE PAS utiliser UIImage-imageNamed: pour charger des images est qu'elles sont stockées dans le cache interne et que ce dernier n'est pas effacé dans les situations de mémoire insuffisante.

Je n'ai pas de réponse précise, mais je suppose que le temps de chargement serait plus lent avec UIImage qu'avec CGImage. Avec CGImage, vous spécifiez le type d'image (jpg ou png) lors de la création, mais avec UIImage, le type d'objet doit être déterminé de manière dynamique. Certes, c'est probablement aussi simple que de regarder les premiers octets du fichier image, mais ce n'est peut-être pas le cas.

Une fois l’image utilisée, je n’imagine pas qu’il y aurait une différence entre l’utilisation de CGImage qui représente en interne un UIImage et l’utilisation d’un CGImage que vous avez créé vous-même. Je penserais qu'ils seraient exactement équivalents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top