Other way around. The copy happens when you *set* the property.

        So ray.path = OriginalPathPointerYouStartedWith;

will copy OriginalPathPointerYouStartedWith and then set ray's member variable to that copy. However when you READ the property, it just returns what's in the member variable over and over again.

If you wanted it to return a copy you could if you wish write your own accessor

-(NSBezierPath*)path
{
        return( [ [ path copy ] autorelease ] );
}

which would copy it when it's accessed and give the accessor its own one to play with. So it would be copied when you set it, and then copied when you returned it. I'm not totally sure how much I like that, it feels a little semantically wrong to me but in the context of your class that might make sense. Were I really going to do that I may not use a property at all and might have a method which is called

        (NSBezierPath*)copyPath

which explicitly returns a copy of the path because that's clear.

On 30-Sep-2009, at 9:02 PM, Colin Howarth wrote:

Hi,

I have a class


@interface Ray : NSObject {

        ...
        NSBezierPath            *path;
        ...
}
@property (copy)        NSBezierPath    *path;
@end


an instance of which is accessed in another class:


- (void)drawRect:(NSRect)rect
{
        NSBezierPath    *temporaryPathPointerWhichIsSupposedToBeDifferent;
        ...
        temporaryPathPointerWhichIsSupposedToBeDifferent = [ray.path];
[temporaryPathPointerWhichIsSupposedToBeDifferent transformUsingAffineTransform: aVeryLongDescriptiveTransformName];
        [temporaryPathPointerWhichIsSupposedToBeDifferent stroke];
        ...
}


I thought the (copy) attribute would mean that temporaryPathPointerWhichIsSupposedToBeDifferent would be, well, a copy of the original path instance (which conforms to the NSCopying protocol). Of course, the compiler doesn't care what *I* think should happen, and applies the transform to path (which is identical to temporaryPathPointerWhichIsSupposedToBeDifferent).

It works if I do:

        temporaryPathPointerWhichIsSupposedToBeDifferent = [ray.path copy];

instead.

Why isn't it doing what I think it should do though?


Thanks,


colin
_______________________________________________

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/rols%40rols.org

This email sent to r...@rols.org

_______________________________________________

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