Comment puis-je obtenir l'adresse mémoire d'un type de valeur ou une coutume struct dans Swift?
Je suis en train d'acquérir une meilleure compréhension de la façon de Swift les copies types de valeur:
Le comportement que vous voyez dans votre code sera toujours comme si une copie a pris
place. Cependant, Swift ne réalise qu'une copie réelle derrière les coulisses
quand il est absolument nécessaire de le faire.
À progresser dans ma compréhension, je voudrais avoir l'adresse mémoire d'un type valeur. J'ai essayé unsafeAddressOf(), mais cela ne fonctionne pas avec les structures et il semble cast Swift standard de la bibliothèque de types de types de référence (Chaîne de caractères est jeté à l'NSString).
Comment puis-je obtenir l'adresse mémoire d'un type de valeur, comme une instance de type Int, ou une coutume struct dans Swift?
OriginalL'auteur GingerBreadMane | 2016-05-23
Vous devez vous connecter pour publier un commentaire.
Selon Martin R' s réponse
Selon nschum réponse, vous pouvez obtenir le (pile), l'adresse d'un struct, construire-dans le type ou la référence d'objet comme ceci:
Une chose que j'ai trouvé est, si
myStruct
n'a pas de valeur, l'adresse à retenir même:Les Classes sont des types référence, de sorte qu'ils ne sont pas copiés lors de la cession. Si vous affectez une instance de classe à un autre objet, ils pointent vers le même objet. Par conséquent, il est normal que dans l'exemple ci-dessus, nous avons la même adresse pour les deux classes. Il n'a rien à voir avec la copie sur écriture. C'est vrai qu'elles soient ou non intégrés ou personnalisés classes. Vous devez mettre en œuvre NSCopying pour faire de votre classe clonable, et de l'attribuer cette façon: b = a.copier ()? MyClass plutôt que b = a
OriginalL'auteur billphilip22
Swift 2.0 :
Vous pouvez utiliser cette
unsafeAddressOf(someObject)
ou Swift 3.0:
utilisation
withUnsafePointer(to: someObejct) { print("\($0)") }
OriginalL'auteur broccoli
Je ne sais pas si il y a un "recommandé" façon de le faire, mais une méthode consiste à utiliser
withUnsafePointer(_:_:)
, comme ceci:Cet imprimé
0x00007ffff52a011c8
sur ma machine.OriginalL'auteur Chris Vig