- ベストアンサー
Objective-CのNSMutableStringについて
- Objective-CのNSMutableStringは文字列を扱うためのクラスです。
- NSMutableString* str = [NSMutableString stringWithString: "Hello"];というコードでは、strという変数に"Hello"という文字列を代入しています。
- []内のNSMutableStringは、strに代入する値の型を指定しています。この場合、"Hello"はNSString型のオブジェクトなので、その型を指定しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
(1)一つはNSMutableString*の部分。これはstr はどういう入れ物なのか指定するものと考えれば良いでしょうか? この「NSMutableString」は、C言語の型宣言です。型を拡張して、クラス名も型として扱います。「*」はポインタを示します。 なので、NSMutableStringというクラスに必要なバッファをメモリ上に確保し、そのバッファの先頭アドレスを、「str」に代入します。 (以上、C言語を習得していれば、理解可能な説明です。) (2)二つ目は[]内のNSMutableStringの部分。strに代入するのはHelloなのですが、どうして[]内にもNSMutableStringを書かないといけないのでしょうか? 「stringWithString:」は、クラスメソッドです。メソッドにはクラスメソッドとインスタンスメソッドの2種類があり、それぞれ「クラス名 命令」、「インスタンス名 命令」という書き方をし、それが文法です。文法なので、「どうして?」とたずねられても、答えられることはなにもありません。「日本語は、どうして主語+述語ではないのか?」という質問に、答えが付けられないのとおなじです。 「NSMutableString* str = [NSMutableString stringWithString: @"Hello"];」は、 「id str = [NSMutableString stringWithString: @"Hello"];」と書くこともできます。「id」は、メモリのアドレスを示します。 型宣言をしていないので、インスタンスのクラスを明確に区別しなければいけない局面だと、めんどうなことになりますが、「NSMutableStringを2度書くのはイヤだ」とおっしゃるなら、この書き方をすればいいでしょう。
お礼
回答ありがとうございます。 NSMutableString* をidに変えても良いというところはわかりました。 ただ、どうしても[NSMutableString stringWithString: @"Hello"]の意味が分かりません。 ネットを探してもCや他の言語を習得している人向けの説明ばかりでわかりませんでした。とりあえずAppleが公開質得るiOS Reference Libraryの「Object-Oriented Programming with Objective-C」「Learning Objective-C」「The Objective-C Programming Language」あたりをがんばって読んでみたいと思っています。