2009-04-19 23 views
3

が、私はこのようなコードを持っている: "私は変換するにはどうすればよいキャスト "のconstのvoid *" に "のconstのchar *"

- (void)_loadData:(const char *)data; 

NSData *data = [NSData dataWithContentsOfURL:objURL]; 
const void *buffer = [data bytes]; 
[self _loadData:buffer]; 
[data release]; 

は "_loadDataは、" 機能は次のように引数を取りますconst void "をObjective-Cの" const char "に変更しますか?

+0

[データリリース];ラインは不要です。ガベージコレクションされていない環境では、アプリケーションがクラッシュする可能性があり、Cocoaのメモリ管理を完全に理解していないことがわかります。あなたは明示的にalloc、copy、またはmutableCopy(私が今考えることができない他のもの)を明示した場合にのみリリースします。 [NSData dataWithContentsOfURL:]から返されたオブジェクトは自動的に解放されるか、ガベージコレクトされます。 – dreamlax

+0

ガーベジコレクションがないiPhoneでも? –

+0

ガーベジコレクションされていない環境では、オブジェクトは自動解放プールに追加され、次のイベントループまたはプール自体の割り当てが解除されたときに割り当て解除される可能性があります。いずれにしても、返されたオブジェクトを「所有していない」ので、解放することはあなたのものではありません。あなたは+ alloc、-copy、または-mutableCopy(そしておそらく他のもの)のどちらかを使って明示的に割り当てるオブジェクトだけを所有します。 – dreamlax

答えて

5

はちょうどあなたがCでするように:

[self _loadData:(const char *)buffer]; 

は動作するはずです。

+0

ありがとう! 私はバッファを別のタイプに割り当てることを試みました。「彼らはちょうどポインタなので、うまくいくはずです。」 const char * charBuff =バッファ;それをキャストすることは決して考えなかった。ハ! –

+0

"const char * charBuff =(const char *)buffer;(char *変数に代入するとまだキャストが必要です)を除いて、あまりにも実際に働いていたでしょう – duncanwilcox

3

データオブジェクトを明示的に割り当てなかったため、データオブジェクトを解放してはいけません。また、簡単なキャストを行うことができます:

[self _loadData:(const char *) buffer]; 
+0

NSDataの良いキャッチです。管理。ありがとう! –

関連する問題