こんにちは、指定した特定の場所で NSObject を初期化する必要があります (たとえば、void* ポインターを介して)。ちょっとした文脈のために、私はsqlite3集計関数を書いています。この関数から一時的な結果を保持するには、メモリ ブロックを割り当てる sqlite3_aggregate_context 関数を呼び出す必要があります。この場所に NSDecimalNumber を格納したいと思います。
これまでのところ、次の 2 つのアプローチを試しました。
1) allocWithZone: 次のように実行します。
void *location = sqlite3_aggregate_context(...); //returns a block of allocated memory of a certain size
NSDecimalNumber *num = [[NSDecimalNumber allocWithZone:NSZoneFromPointer(location)] initWithInt:0];
NSZoneFromPointer が nil を返すため、これは機能しません。ドキュメントによると、この関数への引数は、以前に割り当てられたポインターである必要があります。これが NSZoneMalloc/Calloc を使用して割り当てられることを意味するかどうかはわかりません。
2)
id location = sqlite3_aggregate_function(...);
location = [[NSDecimalNumber alloc] init];
しかし、これにより、メモリを解放するときにある種の無限再帰が発生します...何が問題なのかわかりません。ここのスクリーンショット: http://dl.dropbox.com/u/3002073/Public%20Sync/sqlitefunctionissue.png
どんな提案でも大歓迎です!