A protocol that objects adopt to provide functional copies of themselves.
SDKs
- iOS 2.0+
- macOS 10.0+
- Mac Catalyst 13.0+
- tvOS 9.0+
- watchOS 2.0+
Framework
- Foundation
Declaration
protocol NSCopying
Overview
The exact meaning of “copy” can vary from class to class, but a copy must be a functionally independent object with values identical to the original at the time the copy was made. A copy produced with NSCopying
is implicitly retained by the sender, who is responsible for releasing it.
NSCopying
declares one method, copy(with:)
, but copying is commonly invoked with the convenience method copy()
. The copy()
method is defined for all objects inheriting from NSObject
and simply invokes copy(with:)
with the default zone.
Your options for implementing this protocol are as follows:
Implement
NSCopying
usingalloc
andinit...
in classes that don’t inheritcopy(with:)
.Implement
NSCopying
by invoking the superclass’scopy(with:)
whenNSCopying
behavior is inherited. If the superclass implementation might use theNSCopy
function, make explicit assignments to pointer instance variables for retained objects.Object Implement
NSCopying
by retaining the original instead of creating a new copy when the class and its contents are immutable.
If a subclass inherits NSCopying
from its superclass and declares additional instance variables, the subclass has to override copy(with:)
to properly handle its own instance variables, invoking the superclass’s implementation first.