您好我需要在我指定的特定位置(例如通過void *指針)初始化NSObject。對於一些上下文,我寫了一個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返回零。 Docs說這個函數的參數必須是一個先前分配的指針,它是。我不知道這是否意味着使用NSZoneMalloc/Calloc進行分配。
2)
id location = sqlite3_aggregate_function(...);
location = [[NSDecimalNumber alloc] init];
但這種釋放的內存時會導致某種無限遞歸的...不知道這筆交易是什麼。這裏的截圖: 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 2010-10-17 16:57:58
...但我不知道如何做到這一點,否則。我會嘗試這種方法,看看它是否有效。 – Ying 2010-10-17 17:01:44