6
第一代碼和輸出:的ObjectiveC:使用的NSString和__weak當奇怪的行爲與ARC
NSString *text = @"Sunny";
__weak NSString *string0 = text.lowercaseString;
__weak NSString *string1;
string1 = text.lowercaseString;
NSLog(@"%@, %@", string0, string1);
輸出:
(null), sunny
但經過我移動聲明的string1
的text
以上,輸出是不同的。下面是代碼:
__weak NSString *string1;
NSString *text = @"Sunny";
__weak NSString *string0 = text.lowercaseString;
string1 = text.lowercaseString;
NSLog(@"%@, %@", string0, string1);
輸出:
sunny, sunny
我很困惑與不同的輸出:
- 爲什麼
string0
和string1
是在第一種情況有什麼不同? - 爲什麼第二種情況的輸出與第一種情況不同?
更爲奇怪的是,第一種方案給出正確的輸出,如果你通過保持一個斷點運行,然後通過行執行行。但是,如果你刪除斷點,它會給出'null'。 – Gandalf