On Aug 12, 2009, at 15:00, Georg C. Brückmann wrote:

I agree with that point. You may want to declare a macro like this:

#define INVALIDATE_REFERENCE(obj) ([(obj) autorelease], (obj) = nil)

The reason I chose autorelease over release are situations like the following: You register as a delegate of some object. Then the referenced object sends you a delegate message, to which you respond by clearing your reference to the said object. If at this time you’re sending the object its last release message, it will be deallocated. After your delegate message implementation returns, however, the formerly referenced and now deallocated object may continue executing the method from which it sent you the delegate message. And this is where you’d get into trouble using release instead of autorelease – you’d be in NSZombie hell.

And while this issue may not be relevant to managed objects, it certainly is relevant in other situations.

This doesn't sound like a valid argument. A *delegate* isn't responsible for keeping its referencing object alive, and *as delegate* is unlikely to keep a reference to the referencing object. (Typically, a delegate may serve multiple referencing objects, a pointer to which is passed as the first parameter of every delegate method. Any case where the delegate has to track which referencing objects use it sound incredibly atypical.)

In practice, the delegate is often -- independently of its role as delegate -- the *owner* of the referencing object (e.g. a window controller that is a delegate of a table view loaded from a nib file is the owner of the nib file's contents, including, directly or indirectly, the table view). However, in that case, there's no reason why the owner would relinquish ownership of the owned object during a delegate method.

Unless I'm missing something obvious.


_______________________________________________

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