On Oct 22, 2011, at 8:53 AM, Mr. Gecko wrote:

> static NSAutoreleasePool *pool = nil;
> 
> void runloop(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void 
> *info) {
>       if (activity & kCFRunLoopEntry) {
>               if (pool!=nil) [pool drain];
>               pool = [NSAutoreleasePool new];
>       } else if (activity & kCFRunLoopExit) {
>               [pool drain];
>               pool = nil;
>       }
> }

I very much doubt this is kosher.  An autorelease pool exists in a stack.  If 
the outer autorelease pool is popped, then yours is deallocated whether or not 
you've released or drained it.  After that happens, you have a dangling 
pointer.  It really makes no sense to have an autorelease pool with a lifetime 
greater than the scope of its usage.

Have you tried running a timer to see if that provokes draining of the 
autorelease pool managed by the framework?  Have you tried posting a custom 
event?

Even if those fail, the best approach is to just use local autorelease pools in 
whatever methods you introduce which are creating temporary objects that would 
otherwise live longer than you'd like.

Regards,
Ken

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to