Ziel-C: Schwaches Attritube funktioniert nicht wie erwartet [duplizieren]

Mögliche Duplikate:
Warum werden schwache NSString-Eigenschaften in iOS nicht veröffentlicht?

Ich bin ein Neuling in Objective C und habe einige Fragen, die ich selbst nicht beantworten kann. Ich habe einen Codeblock zum Testen von __schwachen Variablen (ich verwende natürlich ARC):

NSString *myString = [[NSString alloc] initWithFormat:@"John"];
NSString * __weak weakString = myString;
myString = nil; //<-- release the NSString object
NSLog(@"string: %@", weakString);

Die Ausgabe der obigen Codes ist wie erwartet, da weakString eine schwache Variable ist:

2013-01-02 11:42:27.481 ConsoleApp[836:303] string: (null)

Aber als ich den Code geändert habe:

NSString *myString = [[NSString alloc] initWithFormat:@"John"];
NSString * __weak weakString = myString;
NSLog(@"Before: %@", weakString); //<--- output to see if the __weak variable really works.
myString = nil;
NSLog(@"After: %@", weakString);

Die Ausgabe ist absolut nicht das, was ich erwartet habe:

2013-01-02 11:46:03.790 ConsoleApp[863:303] Before: John
2013-01-02 11:46:03.792 ConsoleApp[863:303] After: John

Die Ausgabe des letzteren NSLog muss (nil) statt "John" gewesen sein. Ich habe versucht, in vielen Dokumenten zu suchen, aber ich habe keine Antwort für diesen Fall gefunden. Kann jemand eine vernünftige Erklärung geben? Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage