Holen Sie sich ein Objekt Speicher-Adresse als long/long long?
Was ich brauche, ist ziemlich einfach :
Die gleiche Weise können wir NSLog("%@",someObject);
oder NSString* Hex = [NSString stringWithFormat:@"%p",someObject];
zum drucken der hex Wert von someObject
's Speicher-Adresse, möchte ich, um es in eine Zahl-variable (ein eindeutiger Bezeichner).
Irgendeine Idee, wie dieses getan werden könnte? Jede integrierte Methoden?
- Ja, es ist ein einfacher cast. Aber es werden Drachen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anderen zeigte, wie man den integer-Wert von einer Adresse, die ich hinzufügen möchten som considarations.
Solange das Objekt lebt, der Zeiger ist schon einzigartig. und als sson, die als ein Objekt zu bekommen ist, aufgehoben, es gibt keine Verwendung für einen eindeutigen Bezeichner abgeleitet aus dem Zeiger mehr. infact, es könnte ihm Schaden, wenn Sie eine Kennung für ein bestimmtes Objekt die Adresse wird bereits wieder genutzt.
besser verfolgen eines Objekts, indem Sie es zu einer Sammlung hinzufügen oder eine garantiert einzigartige id auf das Objekt selbst. UUIDs sind eine gute Wahl für diese.
einer Umsetzung für die:
Brauchen Sie keine "Methoden". Sie suchen die cast-operator:
, Aber Sie sollten wirklich nicht tun.
Vielleicht möchten Sie sich an der
-(NSUInteger)hash
Methode auf NSObject statt. Wenn Sie wirklich wollen, obwohl, Zeiger sind die ganzen zahlen schon, und hex ist nur ein format Lesen eine ganze Zahl ein.sizeof(<pointer>) != sizeof(int)
. Lösen Sie die oberen 32 bit-wenn Sie nur Stimmen die Zeiger auf eine int. (Das ist der Grund für dieuintptr_t
Daten Typ.)-hash
ist nicht garantiert die Rückgabe eines eindeutigen Wert für zwei verschiedene Objekte. Die einzige Bedingung ist, dass, wenn-isEqual:
gibt true zurück, für zwei Objekte, die Werte, die von sowohl Objekt-hash
Methode muss gleich sein.NSLog("0x%llx", someObject);
im 64-bit-Plattform.