• 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: Memory Management and @synthesized accessors
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Memory Management and @synthesized accessors


  • Subject: Re: Memory Management and @synthesized accessors
  • From: Ken Thomases <email@hidden>
  • Date: Sat, 21 Feb 2009 13:22:08 -0600

On Feb 21, 2009, at 12:39 PM, Stuart Malin wrote:

I've seen the idiom [[property retain] autorelease] used in getter accessors, and just re-read the Memory Management Programming Guide (MMPG) to understand this. Now I do, and see how the perhaps once canonical approach of having a setter release-then-retain (if the new value is not equal to the present value) can lead to references persisting to a released object (e.g., if the setter is invoked after the getter has issued references). In fact, the MMPG goes so far as to say this about this approach:

"...because of the potential dangers of invalidating objects prematurely, use of this technique should be used sparingly and well documented."

Hmm. Google finds the Accessor Methods article of the Memory Management Guide when I search for that phrase, but the article doesn't actually contain the phrase. I guess it's been edited out.


In any case, I'm not aware of any such issue with any of the techniques listed on the page now.


So, I am curious as to why the default (retain) behavior of @synthesize does just this?

What makes you think it does? There is no concrete promise about how synthesized accessors are implemented, except that they conform to the declared property attributes (retain vs. copy vs. assign, etc.).


There is one place where some pseudo-code is used to _illustrate_ what _might_ be going on inside a synthesized setter, but the documentation clearly says that the actual implementation may differ.


And, is there a way to tell @synthesize to use one of the other approaches, or do I need to make such a property @dynamic and handle the setter/getter myself?

You should trust that Apple is synthesizing just about the most appropriate setter imaginable, given the declared property attributes. Unless you need to do something else within the setter -- that is, the setter has additional side effects -- just use @synthesize.


Cheers,
Ken

_______________________________________________

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: Memory Management and @synthesized accessors
      • From: Stuart Malin <email@hidden>
    • Re: Memory Management and @synthesized accessors
      • From: Stuart Malin <email@hidden>
References: 
 >Memory Management and @synthesized accessors (From: Stuart Malin <email@hidden>)

  • Prev by Date: Re: Memory Management and @synthesized accessors
  • Next by Date: Re: RegisterEventHotKey still the best way for global hotkeys
  • Previous by thread: Re: Memory Management and @synthesized accessors
  • Next by thread: Re: Memory Management and @synthesized accessors
  • Index(es):
    • Date
    • Thread