Frage

Für einige Zeiger Sachen auszuprobieren, habe ich eine Instanzvariable in einem bestehenden Projekt. Es ist wie folgt deklariert:

@interface PointerFun : NSObject {
    NSString* test;
}

Ich habe keine @property Compiler-Direktive, keine @synthesize, also kein Getter und Setter keine. Nur für den Test.

Dann habe ich eine Methode, wo ich mich um einige Dinge mit Zeigern und dieser Instanz Variable versuchen. Was wollte ich eigentlich ist zu prüfen, was passieren würde, wenn ich diese Instanz Variable ein NSString-Objekt zuweisen (oder was auch immer Objekt), und nach dem Objekt zuweisen, weist ein anderes Objekt zu diesem Zeiger, die mich auf die Instanz var zugewiesen. Ich dachte, dass es das Objekt in der Instanz var als weell ändern.

Hier ist also mein Code:

NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];

test = str2; // assign directly to instance variable (bad thing, just for testing!)
str2 = str1; // now lets be really mean and change the object from that pointer!!

NSLog(@"test: %x, %@", test, test); // test: 52cb10, two
NSLog(@"str1: %x, %@", str1, str1); // str1: 52ca60, one 
NSLog(@"str2: %x, %@", str2, str2); // str2: 52ca60, one

Wie Sie sehen, hält der Instanz-Variable auf das NSString Objekt zeigt, die früh hinter str2 war. Also, wenn ich str1 nach str2 zugewiesen, zugewiesen ich den Wert von str1 zu str2, die eine Speicheradresse ist. Also machte ich beiden Zeiger den gleichen Wert haben, nicht wahr?

Aber wenn ich den Wert von str2 zugewiesen zu testen, testen übernahm den Wert von str2, das war -bei, dass die Speicheradresse für das „zwei“ Objekt zeit-. Also selbst wenn ich den Wert des Zeigers str2 nach dieser Zuordnung zu ändern, wird es keinen Einfluss auf den Wert der Instanzvariable. Und weil das ein Zeiger auf ein NSString-Objekt ist, verhält er sich genau das gleiche, als ob es str1 oder str2. Es gibt keinen Unterschied, nur weil es eine Instanz var. Es ist nur eine Variable, oder besser: es ist nur ein Zeiger. Habe ich das richtig? puh;) ... hoffe, so

!
War es hilfreich?

Lösung

Die drei Variablen sind eigentlich Zeiger (Test, str1 und str2), und Sie haben zwei Objekte erstellt. „Eins“ und „zwei“

Wenn Sie das tun:

test = str2;

Sie machen Testpunkt auf das Objekt „zwei“, und wenn Sie das tun:

str2 = str1;

Sie machen str2 auf das Objekt „Eins“, die überhaupt nicht beeinflussen Test.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top