• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: how to clear the whole render tree of CALayer fast and safely?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how to clear the whole render tree of CALayer fast and safely?


  • Subject: Re: how to clear the whole render tree of CALayer fast and safely?
  • From: Jean-Daniel Dupas <email@hidden>
  • Date: Sat, 19 Jul 2008 12:45:13 +0200


Le 19 juil. 08 à 07:20, Cloud Strife a écrit :

Hi, everyone.Assuming there is a Core Animation render tree with many
calayers and complex levels, should I use the iteration function to remove
one layer from one layer or there just is some useful function to delete the
whole render tree neatly at once to make the app robust ?


After created and some work to the existing render tree, I want to clean it
to release the CPU and memory and GPU it occupied. Because the performance
and stability are the main keys of my application. I wrote some ugly code to
do that, as expected, the result is very bad, my application crashed ...
:-(


[self cleanWindowContentViewSubLayers:[[[_aWindow contentView] layer]
sublayers ]];


-(void) cleanWindowContentViewSubLayers:(NSArray*)_Layers{

int i, count = [_Layers count];

for(i = 0;i < count; i++){

CALayer* _oneLayer = (CALayer*)[_Layers objectAtIndex:i];

[self cleanWindowContentViewSubLayers:[_oneLayer sublayers]];

//if the _oneLayer is the leaf of the render tree, when iterating the next
level of the stack, the for statement won't execute for the _Layers == nil


               //then we can delete it

               [_oneLayer removeFromSuperlayer];

[_oneLayer release];

}


You should not retain each sublayer. When you add a sublayer to a parent layer, as the parent CALayer retain it, you can release it. Like that, when you no longer need your tree, just release the root layer (or remove root layer child) and all sub-child will be released automatically.

Just a details, a var name that starts with an underscore is reserved for Apple class's private ivars (and even if they are reserved, many poeple use them for private ivars too), so you should not use it for local variable and parameters. It's very confusing and make the code hard to understand for people who follow coding guidelines.

http://developer.apple.com/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html







_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >how to clear the whole render tree of CALayer fast and safely? (From: "Cloud Strife" <email@hidden>)

  • Prev by Date: setting image for person in address book
  • Next by Date: Re: substitute class at runtime?
  • Previous by thread: how to clear the whole render tree of CALayer fast and safely?
  • Next by thread: Quick problem with arraycontroller
  • Index(es):
    • Date
    • Thread