On 2011-06-29, at 19:17 , Kyle Sluder wrote:

> http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html%23//apple_ref/doc/uid/TP40004447-1000922-BABBFBGJ


Yes, it talks about certain*exceptions*, and you are right, one of them is in 
fact destroying the parent, so I'm wiling to accept that you must not rely upon 
an object to stay alive longer than its parent.  However, have you also read 
the top paragraph?

"Cocoa’s ownership policy specifies that received objects should typically 
remain valid throughout the scope of the calling method. It should also be 
possible to return a received object from the current scope without fear of it 
being released. It should not matter to your application that the getter method 
of an object returns a cached instance variable or a computed value. What 
matters is that the object remains valid for the time you need it."

This principle is violated by a getter returning an object that is not 
retain+autorelease, since even without destroying the parent the returned 
object might go away. As pointed out in my other mail:

[someOtherObject setValue:[someObject value]];

// someObject

        - (id)value
        {
                return value;
        }
        
        - (void)doSomething
        {
                // ...
                [value release];
                value = ...;
                / /...
        }

// someOtherObject

        - (void)setValue:(id)aValue
        {
                [someObject doSomething];
                if (value == aValue) return;

                [value release];
                value = [aValue retain]; // <--- BANG, CRASH
        }

It violates the policy stated above, even though this is *no collection* class 
and the parent has *not* been released. Neither of the two exception cases 
mentioned on the liked page above has been met!

If that was allowed, one would have to write code like this:

        id value = [someObject value];
        [value retain];
        [someOtherObject setValue:value];
        [value release];

And nobody seriously writes such code.

Kind regards,
Markus_______________________________________________

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