• 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: Garbage Collection, Core Foundation, and the -finalize problem
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Garbage Collection, Core Foundation, and the -finalize problem


  • Subject: Re: Garbage Collection, Core Foundation, and the -finalize problem
  • From: Bill Cheeseman <email@hidden>
  • Date: Tue, 17 Mar 2009 05:35:43 -0400


On Mar 16, 2009, at 2:32 PM, Michael Tsai wrote:

On Mar 16, 2009, at 2:08 PM, Bill Cheeseman wrote:

I am looking for a strategy to avoid implementing a -finalize method in a garbage-collected Objective-C class that declares a CFTypeRef-style Core Foundation instance variable. I believe this is a fairly common problem, because any Cocoa wrapper class for a Core Foundation API would have to do it, but I haven't seen a usable solution. Apple's GC documentation stops just short of suggesting an answer.


I believe you're supposed to declare your CFTypeRef ivar as __strong and call CFMakeCollectable so that the garbage collector will be responsible for releasing it. You can still use CFRelease in - dealloc for when you aren't running under garbage collection.

After thinking on this overnight, I have concluded that in a mixed- mode framework the best practice is indeed to call CFMakeCollectable as soon as the CFTypeRef ivar is created so that garbage-collected clients can ignore memory management issues.


As a corollary, when the problem domain served by the framework is such that there is no convenient way to know when to call an - invalidate method, simply put all the cleanup code in -finalize and be done with it.

But perhaps even in this situation, it would be good practice to provide -invalidate and -isValid methods, and write -finalize so that it checks -isValid before calling -invalidate itself. This way, clients who do know when to call -invalidate can do so.

This leaves unresolved the need in some cases to do cleanup work before -finalize because of order-of-execution issues with -finalize. My tentative conclusion is that this is a huge can of worms for garbage collection when CFTypeRef ivars are involved.

--

Bill Cheeseman
email@hidden

_______________________________________________

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


  • Follow-Ups:
    • Re: Garbage Collection, Core Foundation, and the -finalize problem
      • From: "Sean McBride" <email@hidden>
References: 
 >Garbage Collection, Core Foundation, and the -finalize problem (From: Bill Cheeseman <email@hidden>)
 >Re: Garbage Collection, Core Foundation, and the -finalize problem (From: Michael Tsai <email@hidden>)

  • Prev by Date: How can i change the view.
  • Next by Date: Re: How can i change the view.
  • Previous by thread: Re: Garbage Collection, Core Foundation, and the -finalize problem
  • Next by thread: Re: Garbage Collection, Core Foundation, and the -finalize problem
  • Index(es):
    • Date
    • Thread