• 締切済み

Objective-C文字列からC言語文字列に変換したいのですが、どう

Objective-C文字列からC言語文字列に変換したいのですが、どうすればよいでしょうか? C言語からObjective-cなら NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding]; NSLog(@"%@", cToOc); でよいのですが、その逆が知りたいです。 あとこの cToOcは以下のように解放しないといけないのでしょうか? [cToOc release];

みんなの回答

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

> よくわかっていないのですが、 「retain」、「release」、「autorelease」いずれもNSObjectのプロトコルなので、NSObject Protocolレファレンスで調べれば、わかります。 こういうことをいうと、反発されるだけかもしれませんが。英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件なので、英語がわからないといういいわけは、聞き入れることができません。まえもって、お断りしておきます。

mikkychan2
質問者

お礼

>英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件 なるほど、最低条件すら知りませんでした。 英語を避けてはいけないのですね。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

NSStringのインスタンスメソッドに「cStringUsingEncoding:」があります。NSStringのリファレンスを調べれば、すぐに見つかるはずですが? > あとこの cToOcは以下のように解放しないといけないのでしょうか? はいそうです。 代わりに「stringWithCString:encoding:」を使うと、release不用です。 NSStringにかかわらず、すべてのクラスのイニシアライザについて、「init」で始まるものと、クラス名で始まるもので、おなじ仕事をするメソッドがあることに気づきますが、このふたつの違いは、自動でretainするか、自動でautoreleaseするかです。いちど使ったら、すぐに不用になるインスタンスは、後者でイニシアライズするといいでしょう。

mikkychan2
質問者

お礼

ご回答ありがとうございます。 よくわかっていないのですが、 initで始まるものは 自動でretain? releaseは手動 クラス名(stringWithCStringがクラス名)で始まるものは 手動でretain? 自動でreleaseされる という意味でしょうか?

関連するQ&A

専門家に質問してみよう