最近、私はXcodeのObjective Cメモリ管理で奇妙な動作に気付きました。 がエラーを生成する必要がありfirstStringとのNSLogを解放した後ゼロにポイントをsecondStringこと、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;
}
私は思う: は、ここでは、コードです。 しかし、このコードはエラーを生成せず、 "Hello"文字列を正常に出力します。 はI手動でコンパイルし、実行コードなどのコマンドで、あまりにもすべてのエラーを気づいていません:
% 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