Hi Dan,

> I'm still unclear about when temporary strings get free'd (other
> than when the pool they come from gets free'd),

The convention in the Foundation is that every object that gets created by its class 
"factory" method (such as stringWithFormat, etc), as opposed to the default alloc/init 
construction belong to the autorelease pool -- which mean that they will be garbage 
collected once the autorelease pool is released.

You can think of autorealeased pools stacked arrays of object references. When the 
pool is released, all references are deallocated. From what I've experimented, 
autorelease pools are not processed by an asynchronous garbage collector, which means 
that you can safely manipulate the autoreleased object until the next releasing of the 
autorelease pool.

Another interesting point is that you can create "nested" autorelease pools like this:

 - foo
 {
   id pool = [[NSAutoreleasePool] alloc]init];
   id string = [NSString stringWithCString:"Hello"];
   //Here the string can be safely accessed, although it is is the pool 
   NSLog("%@", string);
   [pool release];
   //String was deallocated, so we cannot safely access it.
   //There is a chance to get a core dump here.
   NSLog("%@, string);
 }

This can be used when you want to free some memory earlier than the next loop in the 
event loop.

Cheers,

 -- Sebastien


_______________________________________________
Help-gnustep mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/help-gnustep

Reply via email to