J'essaye d'accélérer mon gui qui charge très lentement lent quand je charge un grand projet (le gui est une représentation des groupes et sous-groupes et est composé de beaucoup de vues). Au cours de ce processus, je regardais la durée d'exécution de certains segments de code et j'ai constaté qu'un appel à addsubview prenait entre 10 et 20 millisecondes la plupart du temps. La sous-vue que je regardais est un bouton de divulgation. Je me demande si cette méthode est juste intrinsèquement lente ou est leur autre facteur à l'œuvre ici? Est-ce que le temps qu'il faut pour ajouter la sous-vue dépend de la complexité de la sous-vue ou n'est-ce pas un facteur? Aussi, existe-t-il une autre méthode qui peut être utilisée pour ajouter une sous-vue qui pourrait être plus rapide?La méthode addSubview de NSView est-elle intrinsèquement lente? (Cocoa OSX)
Répondre
Vous pouvez essayer -setSubviews: qui prend un tableau de sous-vues. Cela peut être plus rapide que d'appeler -addSubview: plusieurs fois vous-même.
Sinon, -addSubview: et -addSubview: positionné: relativeTo: sont les seules autres méthodes d'insertion de sous-vues.
Je suis curieux, cependant, pourquoi ralentir de 10 à 20 ms pour une seule sous-vue? Combien de sous-vues essayez-vous d'ajouter?
Il est possible qu'il existe une autre conception utilisant NSCell's qui peut être plus rapide, mais sans savoir plus de détails sur ce que vous essayez d'accomplir, il est difficile de le savoir.
La réorganisation de la hiérarchie des vues n'est pas quelque chose que vous feriez très souvent. Au lieu d'ajouter et de supprimer des sous-vues, vous pouvez les masquer et les afficher.
Je ne suis pas en train de supprimer et d'ajouter des sous-vues. Je les cache et les affiche comme vous les décrivez. Le ralentissement se produit lorsque j'ajoute plusieurs sous-vues lorsque je charge initialement mon interface graphique. L'interface fonctionne bien lorsque vous ajoutez un seul élément à la fois. – Mike2012
Mon interface graphique est composée d'une hiérarchie de vues, il s'agit essentiellement d'imiter les fonctionnalités de l'interface graphique itunes. J'ai des groupes qui contiennent un bouton de divulgation, une image et un champ de texte (j'ajoute le champ image et texte, et un bouton avec des appels à addsbubview) puis chaque groupe a un sous-groupe qui a une image et un champ texte mais pas de bouton. De plus, chaque groupe et élément est contenu dans une vue qui aide à détecter quand le groupe ou l'élément est sélectionné. Mon problème se produit lorsque je charge initialement un projet qui peut être composé de plusieurs groupes comportant chacun plusieurs éléments. – Mike2012
Je crois que vous devrez repenser votre implémentation. Utiliser plus de plusieurs centaines de vues individuelles ne fonctionnera pas bien. Ce sera lent. Je suggère ce qui suit: (1) Ramasser une copie de "Cocoa Programming pour Mac OS X (troisième édition)" par Aaron Hillegass Vues Cela vous donnera une brève explication sur la motivation derrière les cellules. (2) Prenez une copie de "Cocoa Design Patterns" par Erik Buck et Donald Yacktman et lisez le chapitre sur les poids mouches. Je suggère également de lire le reste du livre aussi. – ericg