プロが教えるわが家の防犯対策術!

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

C言語からObjective-cなら

NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding];
NSLog(@"%@", cToOc);

でよいのですが、その逆が知りたいです。

あとこの cToOcは以下のように解放しないといけないのでしょうか?

[cToOc release];

A 回答 (2件)

> よくわかっていないのですが、



「retain」、「release」、「autorelease」いずれもNSObjectのプロトコルなので、NSObject Protocolレファレンスで調べれば、わかります。

こういうことをいうと、反発されるだけかもしれませんが。英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件なので、英語がわからないといういいわけは、聞き入れることができません。まえもって、お断りしておきます。
    • good
    • 0
この回答へのお礼

>英文のリファレンスを読めることが、Cocoa、iPhone SDK開発の、最低条件

なるほど、最低条件すら知りませんでした。

英語を避けてはいけないのですね。

お礼日時:2010/11/07 16:49

NSStringのインスタンスメソッドに「cStringUsingEncoding:」があります。

NSStringのリファレンスを調べれば、すぐに見つかるはずですが?

> あとこの cToOcは以下のように解放しないといけないのでしょうか?

はいそうです。
代わりに「stringWithCString:encoding:」を使うと、release不用です。

NSStringにかかわらず、すべてのクラスのイニシアライザについて、「init」で始まるものと、クラス名で始まるもので、おなじ仕事をするメソッドがあることに気づきますが、このふたつの違いは、自動でretainするか、自動でautoreleaseするかです。いちど使ったら、すぐに不用になるインスタンスは、後者でイニシアライズするといいでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
よくわかっていないのですが、

initで始まるものは 自動でretain? releaseは手動

クラス名(stringWithCStringがクラス名)で始まるものは 手動でretain? 自動でreleaseされる

という意味でしょうか?

お礼日時:2010/11/07 15:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!