簡體   English   中英

從NSDictionary存儲和檢索int64_t:NSNumber vs NSString

[英]Storing and retrieving an int64_t from an NSDictionary: NSNumber vs NSString

我正在開發一款具有Game Center功能的游戲。 在內部,我的游戲在int64_t類型的變量中保存所有分數,因為這是通過GameKit API報告分數所需的類型(我假設這是為了避免32位和64位平台之間的歧義)。

到現在為止還挺好。

接下來,我希望在本地存儲用戶的hiscore(例如,在NSUserDefaults 。但是.plist是等效的),因為當沒有經過身份驗證的Game Center播放器時,還要通過iCloud鍵值與用戶擁有的其他設備同步。

我可以像這樣存儲 int64_t hiscore:

// (int64_t) _hiscore is an ivar.
// (NSString) _playerID is the authenticated player ID, or else 
//  "AnonymousUser" when GKLocalPlayer is not authenticated.

[playerData setObject:@(_hiscore) forKey:@"HiScore"];
[[NSUserDefaults standardUserDefaults] setObject:playerData forKey:_playerID];
[[NSUserDefaults standardUserDefaults] synchronize];

...(假設“@()”運算符將在所有情況下都要小心 - 不確定這個......),但是我應該使用哪個NSNumber方法來檢索值而不會冒整數溢出的風險?

類的所有-*value方法(例如-intValue-longValue-unsignedIntegerValue等)返回與平台相關的類型(與int64_t不同,它具有明確的字節大小)。 這篇文章提供了關於每個平台上所有數據類型的精彩信息,但它對NSNumber沒有幫助......

我可以對每個平台的區分類型的大小進行運行時檢查(例如,查看sizeof(unsigned long)等於4或8,並在每種情況下使用不同的方法),但這看起來並不優雅 並不是說新架​​構會很快出現,但......

我還可以將號碼存儲為一個字符串,如在這個崗位 ,但手頭上有字典友好的NSNumber,感覺傻...

你會推薦什么?

使用-[NSNumber longLongValue] C標准(C99)保證long long至少為64位。

順便說一句,如果_hiscoreint64_t ,新的@(_hiscore)語法相當於[NSNumber numberWithLongLong:_hiscore]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM