Привет, мне нужно инициализировать NSObject в определенном месте, которое я указываю (например, с помощью указателя void *). Для небольшого контекста я пишу агрегированную функцию sqlite3. Чтобы сохранить временные результаты этой функции, я должен вызвать функцию sqlite3_aggregate_context, которая выделяет мне блок памяти. Я хочу сохранить NSDecimalNumber в этом месте.Как инициализировать объект (подкласс NSObject) по определенному адресу
До сих пор я пытался два подхода:
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 возвращает ноль. Документы говорят, что аргументы этой функции должны быть ранее выделенным указателем, которым он является. Я не знаю, означает ли это выделение с использованием NSZoneMalloc/Calloc.
2)
id location = sqlite3_aggregate_function(...);
location = [[NSDecimalNumber alloc] init];
, но это приводит к какой-то бесконечной рекурсии при освобождении памяти ... не уверен, что сделка. A Снимок экрана здесь: http://dl.dropbox.com/u/3002073/Public%20Sync/sqlitefunctionissue.png
Любые предложения будут очень полезными!
Я действительно разместил этот вопрос и не получил много информации: http://stackoverflow.com/questions/3919127/how-should-nsdecimalnumbers-be-stored-in-the-database. Мне нужно сохранить nsdecimalnumber, потому что я работаю с валютами и не могу позволить себе потерять точность с двойными типами при записи в базу данных. Я сохраняю их как строки, а затем читаю их как nsdecimal число для суммирования в агрегатной функции. Следовательно, необходимо сохранить временную сумму переменных до сих пор. Думаю, с этим подходом мне придется выпустить и создать новую переменную для каждой строки ... – Ying
... но я не уверен, как это сделать в противном случае. Я попробую этот подход и посмотрю, работает ли он. – Ying