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,184
  • 3
  • 32
  • 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,354
  • 13
  • 96
  • 143
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
  • 111,848
  • 21
  • 189
  • 228