私が宣言した場合NSMutableString
NSMutableString *str_value;
なぜこれをポインタとして宣言する必要があるのですか(を使用して*
)?そうしないと、コンパイルエラーが発生します。
誰かがこれを明確に説明できますか?
私が宣言した場合NSMutableString
NSMutableString *str_value;
なぜこれをポインタとして宣言する必要があるのですか(を使用して*
)?そうしないと、コンパイルエラーが発生します。
誰かがこれを明確に説明できますか?
Objective CはCのスーパーセットであることを思い出してください。Cなしで変数を宣言する*
と、その変数のメモリが、ローカル変数の場合は自動ストレージに、外部構造の一部として割り当てられていることを示します。構造体のメンバーであるか、静的またはグローバルの場合は静的メモリ内にあります。*
関数のパラメーターリストにないタイプ名または構造タグを使用すると、値を渡すことを示します。
Objective C言語の設計者は、Javaのようなルートを取り、すべてのクラスインスタンスをポインタ構文のないポインタにすることができますが、Objective Cのプログラムの読者は、名前がに基づくtypedefを表すかどうかを知る必要があります。struct
または、id
その型のオブジェクトに関する最も基本的な質問にも答える型。たとえば、ポインタまたは値によって暗黙的に渡されるかどうか、所有構造の一部として割り当てられるか、内部のポインタが指すヒープオブジェクトとして割り当てられるかなどです。構造など。
この種の混乱を避けるために、Objective Cの設計者は、id
オブジェクトの明示的なポインター構文を保持することにしました。
ポインタは、そのクラスを指している/参照していることを意味します。はい、コンパイルエラーが発生します。ポインタの理由は主にメモリです。1つのデータ型(intまたはBOOLまたはfloatなど)は数バイトしかないため、ポインターは必要ありません。しかし、NSMutableStringやその他のObjective-Cクラスには、多くのコードを含む多くのプロパティとメソッドがあります。したがって、アプリには多くのオブジェクトが含まれるため、多くのメモリを使用するため、アプリの速度が低下したり、パフォーマンスが低下したりします。もちろん、ポインタを作成したら、オブジェクトを解放する必要があります。