Ваша первая версия просто не будет работать.NSZoneFromPointer работает только при передаче указателя, выделенного из зоны.Он используется для того, чтобы вы могли выделить объект из той же зоны, что и какой-либо другой объект.
Вторая версия должна работать, хотя трудно сказать без дополнительного контекста.Что вы передаете sqlite3_aggregate_context в качестве размера памяти для выделения?И как вы освобождаете эту память, когда закончите?
Вторая версия не работает, потому что тип "id" на самом деле является указателем, поэтому вы указываете на возвращаемую памятьс помощью sqlite3_aggregate_context (), затем указывая его на память, возвращаемую alloc / init.Вам действительно нужно хранить указатель на указатель, чтобы заставить его работать так, как вы хотите.
NSDecimalNumber является неизменяемым классом, поэтому вызов -init для него (в отличие от -initWithDecimal :) просто выполняетсячтобы получить значение по умолчанию.Какой тип кода вы используете для замены NSNumber новыми значениями по мере выполнения функции?
Более конкретно, зачем вообще использовать NSDecimalNumber, а не целое число C, или double, или что-то еще?