2010-12-02 3 views
1

自動解放プールを作成せずにNSValueをC構造体へのポインタでインスタンス化できますか?現時点では、私はこれを行います:NSValueを手動で解放する

NSValue* val = [NSValue valueWithPointer:(const void*)structure]; 

しかし、これは自動解放プールによって解放されます。私はこれをコントロールし、私が望むときにそれを解除できるようにしたいと思います。これは可能ですか?私はこれを試しました:

NSValue* value = [[NSValue alloc] initWithBytes:(const void*)structure objCType:@encode(const void*)]; 
[value release]; 

しかし、それは何らかの理由でクラッシュしています。すぐにリリースできる他の方法はありますか? ありがとう!

+0

エラーログはありますか? – vikingosegundo

+0

ファウンデーションコードの作成中に自動解放プールを回避しようとすると、かなり無駄になることに注意してください。気にしないでください。 – bbum

答えて

3

objCType:引数に指定されているタイプにポインタを渡すことになっています。の変数を渡しています。たとえば、NSValueに格納する変数int fooがある場合は、[[NSValue alloc] initWithBytes:&foo objCType:@encode(int)]と書いてください。したがって、ポインタを格納したい場合は、そのポインタへのポインタをバイトとして渡す必要があります。ポインタ自体を渡すことで、NSValueはポインタをたどろうとしますが、そのポインタが指すバイトもポインタとして扱います。

+0

それはまさに問題でした。ありがとう! –

0
NSValue* val = [NSValue valueWithPointer:(const void*)structure]; 
[val retain]; 
関連する問題