Je suis en train de mettre en œuvre une méthode de copiewithzone pour une classe personnalisée d'une classe, dans laquelle un pointeur NSNUMBER a été déclaré (conserver) Propriété
new.num = [[[NSNumber alloc] initWithFloat:[num floatValue]] autorelease]
4 Réponses :
Vous devez utiliser [[A Alloc] Initwithzone: zone] lors de la mise en œuvre du protocole NScopying. P>
Comme d'autres ont déclaré cependant, Nsnumber est immuable et renvoie donc le même objet. P>
Les zones sont toutes sauf obsolètes. Peu importe.
Tandis que NScopying nécessite la méthode suivante ...- (ID) Copywithzone: (Nszone *) Zone, InitiPwithzone: La zone est ce que vous devriez faire. Cela n'avait pas besoin d'un bowvote par un tronçon de l'imagination!
initwithzone: code> n'existe pas. Vous voulez dire
allocwithzone: code>
nsnumber code> n'est pas mutable, il n'est donc pas nécessaire de forcer la copie physique. P>
Nstring n'est pas mutable aussi, mais pourquoi cela pourrait être appliqué avec copie?
@TOM: à cause de nsmutableString code> apporter une mutabilité possible. Il n'y a pas d'équivalent
nsmutablenumber code> donc il n'y a pas de besoin de préoccupation.
Nsnumber est immuable. Faire une copie est inutile et, par conséquent, les cadres ne se souviennent que de soi lorsque la copie est invoquée. P>
Si une classe implémente NScopying, vous devez marquer la propriété comme copier code> (pas
retenir code>).
-Copy code> sur les classes immuables (
nstring code>) retournera simplement une référence à l'objet (avec un nombre de retenue cogné). Si vous avez passé une instance mutable, il sera copié à une instance immuable. Cela empêche une partie externe de changer l'état derrière le dos de votre objet. P>
Mais qu'en est-il de Nstring, ce n'est pas aussi mutable.
Comme l'affirme Abizem dans l'autre réponse, Nsnumber est un poids volé. Si vous créez un tas d'instances séparées de [Nsnumber NumberBool: Oui], ils partageront généralement le même stockage sous-jacent pour l'objet Bool et Nsnumber qui le casse. Si vous créez un tas d'instances séparées de [Nstring StringwithUtF8String: «Oui»], ils auront généralement leur propre stockage séparé pour les caractères et l'objet Nstring qui les enfoncent. Les détails réels sont un peu plus compliqués (et ne font pas partie de l'interface publique), mais c'est l'idée de base.
Et sur Lion, c'est un poids volé pour environ 2 ^ 56 valeurs de valeur ... En fait, il n'y a même pas un singleton; Aucune allocation ne représente du tout les données.
Non seulement Nsnumber immutable - Pour les valeurs basses, comme aussi un Flyweight . p>