- 締切済み
Objective-C文字列からC言語文字列に変換したいのですが、どう
Objective-C文字列からC言語文字列に変換したいのですが、どうすればよいでしょうか? C言語からObjective-cなら NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding]; NSLog(@"%@", cToOc); でよいのですが、その逆が知りたいです。 あとこの cToOcは以下のように解放しないといけないのでしょうか? [cToOc release];
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- harawo
- ベストアンサー率58% (3742/6450)
> よくわかっていないのですが、 「retain」、「release」、「autorelease」いずれもNSObjectのプロトコルなので、NSObject Protocolレファレンスで調べれば、わかります。 こういうことをいうと、反発されるだけかもしれませんが。英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件なので、英語がわからないといういいわけは、聞き入れることができません。まえもって、お断りしておきます。
- harawo
- ベストアンサー率58% (3742/6450)
NSStringのインスタンスメソッドに「cStringUsingEncoding:」があります。NSStringのリファレンスを調べれば、すぐに見つかるはずですが? > あとこの cToOcは以下のように解放しないといけないのでしょうか? はいそうです。 代わりに「stringWithCString:encoding:」を使うと、release不用です。 NSStringにかかわらず、すべてのクラスのイニシアライザについて、「init」で始まるものと、クラス名で始まるもので、おなじ仕事をするメソッドがあることに気づきますが、このふたつの違いは、自動でretainするか、自動でautoreleaseするかです。いちど使ったら、すぐに不用になるインスタンスは、後者でイニシアライズするといいでしょう。
お礼
ご回答ありがとうございます。 よくわかっていないのですが、 initで始まるものは 自動でretain? releaseは手動 クラス名(stringWithCStringがクラス名)で始まるものは 手動でretain? 自動でreleaseされる という意味でしょうか?
お礼
>英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件 なるほど、最低条件すら知りませんでした。 英語を避けてはいけないのですね。