NSZone
non viene utilizzato in Objective-C per un lungo periodo di tempo. E passato l'argomento zone
viene ignorato. Citazione dal allocWithZone...
documenti:
Questo metodo esiste per motivi storici; le zone di memoria non sono più utilizzate da Objective-C.
Sei sicuro di ignorarlo.
Ecco un esempio di come è conforme al protocollo NSCopying
.
class GameModel: NSObject, NSCopying {
var someProperty: Int = 0
required override init() {
// This initializer must be required, because another
// initializer `init(_ model: GameModel)` is required
// too and we would like to instantiate `GameModel`
// with simple `GameModel()` as well.
}
required init(_ model: GameModel) {
// This initializer must be required unless `GameModel`
// class is `final`
someProperty = model.someProperty
}
func copyWithZone(zone: NSZone) -> AnyObject {
// This is the reason why `init(_ model: GameModel)`
// must be required, because `GameModel` is not `final`.
return self.dynamicType.init(self)
}
}
let model = GameModel()
model.someProperty = 10
let modelCopy = GameModel(model)
modelCopy.someProperty = 20
let anotherModelCopy = modelCopy.copy() as! GameModel
anotherModelCopy.someProperty = 30
print(model.someProperty) // 10
print(modelCopy.someProperty) // 20
print(anotherModelCopy.someProperty) // 30
P.S. Questo esempio è per Xcode versione 7.0 beta 5 (7A176x). Soprattutto lo dynamicType.init(self)
.
Edit per Swift 3
Di seguito è riportato l'implementazione del metodo copyWithZone per Swift 3 come dynamicType
è stato deprecato:
func copy(with zone: NSZone? = nil) -> Any
{
return type(of:self).init(self)
}
Ho provato l'applicazione del presente per la mia classe, ma come posso creare una copia mentre copi anche le variabili della classe? Per ora, sto ottenendo una nuova istanza che non ha le proprietà copiate dalla vecchia istanza. –
Come copiare tutte le proprietà di una classe contemporaneamente piuttosto che eseguire l'assegnazione una alla volta. Perché vedi che ho una classe con circa 50 proprietà, e c'è un'alta probabilità che io possa perdere l'incarico di alcune di esse. Qualsiasi via d'uscita? –