Reputation: 7234
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
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
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