2

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?

Charles Harley
  • 7,064
  • 3
  • 30
  • 38

2 Answers2

4

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

Community
  • 1
  • 1
Felix
  • 35,239
  • 13
  • 95
  • 142
1

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;
}   
zaph
  • 110,296
  • 20
  • 185
  • 221