Charles Harley
Charles Harley

Reputation: 7234

Arguments for a copy method versus a copy constructor in Objective-C

I'm relatively new to the world of Objective-C and have a class that I've written to which I'd like to add the ability to create a copy.

Coming from Java, I know that I could either write a copy constructor or a clone method, with the latter commonly not being recommended. However, Objective-C is a different language and before I proceed I'd like to understand the arguments for a copy method versus a copy constructor in Objective-C. What is the most commonly used approach?

Upvotes: 2

Views: 2759

Answers (2)

zaph
zaph

Reputation: 112857

Use: -(id)copyWithZone:(NSZone*)zone which is part of the NSCopying protocol

Example:

in .h:

@interface MyClass : NSObject <NSCopying>

in .m

-(id)copyWithZone:(NSZone*)zone {
    MyClass *copy = [[[self class] allocWithZone: zone] init];
    copy.user = self.user;
    copy.password = self.password;
//    etc

    return copy;
}   

Upvotes: 1

Felix
Felix

Reputation: 35384

The recommended way to add the ability to copy objects is by implementing the NSCopying protocol. Many foundation classes also implement NSCopying.

Refer to this answer for more information: Implementing NSCopying

Upvotes: 4

Related Questions