2010-04-10 5 views
0

Je suis actuellement confronté à des problèmes de performances lorsque j'utilise plusieurs couches personnalisées en tant que sous-couches dans ma vue.Problème de performances de CALayer multiple

Après avoir créé ma nouvelle couche programmation, je l'ajoute comme sous-couche, comme:

[self.view.layer addSublayer:myNewSublayer]; 

Cela fonctionne très bien. Cependant, en faisant cela encore et encore mon application commence à ralentir de plus en plus. Je suis assez sûr que cela arrive, parce que j'ajoute constamment une nouvelle sous-couche à mon avis. Ainsi, afin de résoudre ce problème, j'ai essayé d'enlever tout de self.view.layer avant d'ajouter de nouvelles sous-couches, comme:

[self.view.layer setContents:nil]; 

Malheureusement, cela n'a pas résolu mon problème.

Mes nouvelles sous-couches sont correctement libérées après avoir été ajoutées en tant que sous-couche. J'ai vérifié cela dans les instruments et il n'y a définitivement aucune fuite de mémoire. Cependant, je vois que la mémoire s'incrémente chaque fois que j'ajoute de nouvelles sous-couches (ce qui ne me surprendrait pas).

Je pense que je dois trouver une façon différente de supprimer toutes les sous-couches de la couche de ma vue.

Toute aide appréciée. Merci d'avance.

Répondre

1

Si vous ajoutez continuellement des sous-couches à votre couche racine et ne les enlevez pas, il deviendra lent & bloaty. Vous utilisez la mauvaise méthode pour supprimer les sous-couches:

[[self.view.layer sublayers] makeObjectsPerformSelector:@selector(removeFromSuperlayer)]; 

setContents: définit le contenu d'image de la couche (généralement via un CGImageRef).