Wie kann ich die Speicheradresse eines Werttyps oder einer benutzerdefinierten Struktur in Swift ermitteln?

7

Ich versuche, ein tieferes Verständnis dafür zu bekommen, wie schnell kopiert Werttypen :

  

Das Verhalten, das Sie in Ihrem Code sehen, wird immer so aussehen, als hätte eine Kopie stattgefunden   Ort. Swift führt jedoch hinter den Kulissen nur eine Kopie aus   wenn es unbedingt notwendig ist.

Um mein Verständnis zu verbessern, möchte ich die Speicheradresse eines Werttyps erhalten. Ich habe versucht unsafeAddressOf (), aber dies funktioniert nicht mit Strukturen und es scheint zu Swift-Standard-Bibliothek Typen Referenztypen (zB String wird in NSString umgewandelt).

Wie kann ich die Speicheradresse eines Werttyps wie eine Instanz von Int oder eine benutzerdefinierte Struktur in Swift abrufen?

    
GingerBreadMane 23.05.2016, 23:09
quelle

3 Antworten

13

Laut Martin Rs Antwort

  

addressOf () kann nicht mit Strukturvariablen verwendet werden. String ist eine Struktur, wird jedoch automatisch an NSString überbrückt, wenn sie an eine Funktion übergeben wird, die ein Objekt erwartet.

Nach der Antwort von nschum können Sie die (Stack-) Adresse eines struct , eines eingebauten Typs oder eines Objektverweises wie folgt erhalten:

%Vor%

Eine Sache, die ich fand, ist, wenn myStruct keinen Wert hat, wird die Adresse gleich behalten:

%Vor%     
luiyezheng 24.05.2016, 02:31
quelle
6

Swift 2.0:

Sie können dieses unsafeAddressOf(someObject)

verwenden

oder in Swift 3.0:

verwende withUnsafePointer(to: someObejct) { print("\(%code%)") }

    
broccoli 24.08.2016 12:13
quelle
4

Ich bin mir nicht sicher, ob es einen "empfohlenen" Weg gibt, dies zu tun, aber eine Methode besteht darin, withUnsafePointer(_:_:) wie folgt zu verwenden:

%Vor%

Dieser Ausdruck 0x00007ffff52a011c8 auf meinem Computer.

    
Chris Vig 24.05.2016 01:30
quelle

Tags und Links