嗨,我需要在我指定的特定位置初始化一个 NSObject(例如,通过 void* 指针)。对于一点上下文,我正在编写一个 sqlite3 聚合函数。为了保留这个函数的临时结果,我必须调用一个 sqlite3_aggregate_context 函数,它为我分配一块内存。我想在这个位置存储一个 NSDecimalNumber。
到目前为止,我尝试了两种方法:
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
任何建议将不胜感激!