最近我注意到了Xcode中Objective C內存管理的奇怪行爲。 下面是代碼:Xcode 8.3中奇怪的Clang行爲
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *firstString = [[NSString alloc] initWithString: @"Hello"];
NSString *secondString = firstString;
[firstString release];
NSLog(@"%@", secondString);
}
return 0;
}
我認爲,secondString點零釋放firstString和的NSLog應該產生錯誤後。 但是,此代碼不會產生任何錯誤併成功地打印「Hello」字符串。 我手動編譯和這樣的命令運行代碼並沒有發現任何錯誤太:
% clang -framework Foundation -fno-objc-arc main.m && ./a.out
我試圖編譯這段代碼在線的Objective-C編譯器(GCC)(http://rextester.com/l/objectivec_online_compiler)和錯誤是發生了。 我在做什麼錯? 在Xcode中關閉ARC支持。 在此先感謝。
感謝您的詳細解答!我嘗試並得到與其他對象(不是NSString)的預期行爲。 – akozin
'NSString'因這種行爲而臭名昭着。我不熟悉那些表現得如此異常的人,但這是可能的。如果不知道其他課程是否遇到類似問題,我不能進一步評論。但如果你按照靜態分析儀的建議,你會沒事的。 – Rob