1

自動解放プールを作成せずに、C構造体へのポインターを使用してNSValueをインスタンス化することは可能ですか?今のところ、私はこれを行います:

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

ただし、これは自動リリースプールによるリリースです。これを管理し、必要なときに割り当てを解除できるようにしたいと思います。これは可能ですか?私はこれを試しました:

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

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

4

2 に答える 2

3

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

于 2010-12-02T23:35:30.297 に答える
0
NSValue* val = [NSValue valueWithPointer:(const void*)structure];
[val retain];
于 2010-12-03T11:12:28.397 に答える