重複の可能性:
NSString の割り当てと初期化
一部のオブジェクトを初期化してメモリを割り当てる必要がないのはなぜだろうと思っていました。私はこれを読みました:なぜ一部のオブジェクトは、objective-c で使用する前に初期化する必要がないのですか? そして彼らは、メソッドがdate
初期化してメモリを割り当てたと言いましたtoday
。しかし、私が書いたばかりの場合、NSString *str = @"Hello";
それはまだ初期化され割り当てられていますか?
重複の可能性:
NSString の割り当てと初期化
一部のオブジェクトを初期化してメモリを割り当てる必要がないのはなぜだろうと思っていました。私はこれを読みました:なぜ一部のオブジェクトは、objective-c で使用する前に初期化する必要がないのですか? そして彼らは、メソッドがdate
初期化してメモリを割り当てたと言いましたtoday
。しかし、私が書いたばかりの場合、NSString *str = @"Hello";
それはまだ初期化され割り当てられていますか?
コンパイラが@"Hello"
.o ファイルを参照すると、「ねえ、開発者は内容を含む文字列が必要"Hello"
です。リンカーがすべてをリンクすると、すべての文字列を一意化し、すべての文字列を含む文字列テーブルを生成します。その中で定義されたコード。
したがって、実際には、コンパイラはコンパイルおよびリンク時に文字列インスタンスを「割り当てて初期化」しています。
NSString
それらは実際には、クラス クラスターの特定のサブクラスがカプセル化できる特別な形式で格納されます。アプリを実行すると、このサブクラスのインスタンスが既に存在し、単にメモリにマップされます。
いいえ、割り当ても初期化もされていません。しかし、はい、それでも言葉のあらゆる意味でオブジェクトです。唯一の注意点は、retain/release/autorelease を無視することです。したがって、そうするときはNSString* foo = @"foo";
、技術的にもretain
ed にする必要があります。しかし、慣例により、誰も気にすることはなく、それで問題ありません。