我試圖創建一個應用程序,將使用非常大的數字。我想知道[NSNumber numberWithUnsignedLongLong]的存儲能力是我可以獲得的最大數量嗎?如果NSUInteger與[NSNumber numberWithUnsignedLongLong]具有相同的存儲能力?NSUInteger是否等於[NSNumber numberWithUnsignedLongLong]?
0
A
回答
0
只需使用uint64_t
(64位無符號整數,與unsigned long long
相同)。
除非您將值存儲在Objective-C集合類(例如NSArray
)中,否則您不想使用NSNumber
,因爲它們是不可變的,這使得它們操作非常困難並且代價高昂。
1
NSUInteger是基本c型的typedef。確切類型取決於您的平臺:
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
所以大小可通過實施的C有所不同,但無符號長至少爲32位和unsigned long長至少是64位。
使用類型,你知道大小可能會更好,當你擔心溢出。如果需要的話,它們總是可以包裝在Objective-C類型中。
uint64_t保存一個數字直到UINT64_MAX可能是有用的。
#define UINT64_MAX (18446744073709551615ULL)
0
你是正確的,你[*]可以在NSNumber
存儲最大的無符號整數類型爲unsigned long long
- 與當前系統希望這是64位。
這種類型是否相當於NSUInteger
?不,這是平臺相關的,可能是int
或long
,但不是long long
。只要使用unsigned long long
或typedef
它,例如:
typedef unsigned long long MYULongLong
你可以使用一個大小類型,如uint64_t
,但也有NSNumber
沒有匹配尺寸的方法。您可以解決通過使用基於sizeof
類別和條件代碼添加這樣的方法來NSNumber
- 小心一點,你可以寫這樣所有條件語句編譯期間消失,即作爲一個練習;-)
HTH
相關問題
- 1. 檢測NSNumber是否等於NULL
- 2. NSNumber floatValue不等於NSNumber的值
- 3. 爲NSUInteger返回NSNotFound是否明智?
- 4. NSNumber與0轉換爲NSInteger/NSUInteger變爲零
- 5. 分配的數組數爲int,NSNumber的或NSUInteger失敗
- 6. 檢查NSNumber是否是分數
- 7. onpropertychange是否等於oninput?
- 8. Time.zone.now.to_date是否等同於Date.today?
- 9. IntPtr.Zero是否等於null?
- 10. ⇧是否等同於?
- 11. 是否等於DateTime.UtcNow的DateTimeOffset.UtcNow.DateTime?
- 12. PostbackUrl是否等同於Form.Submit?
- 13. System.Web.Hosting.HostingEnvironment.Cache是否等於HttpContext.Current.Cache?
- 14. UrlHelper.Action是否等同於UrlHelper.RouteUrl?
- 15. NaN是否等於NaN?
- 16. dlnorm是否等於dnorm?
- 17. NaN是否等於0?
- 18. UIView frame.size.width是否等於零?
- 19. NHibernate [Min(x)]是否大於等於?且不大於或等於?
- 20. NSUInteger小於0,爲什麼?
- 21. 檢測是否NSNumber介於0和255之間
- 22. 8是否不小於等於30?
- 23. 零是否小於或等於零?
- 24. NSUInteger與NSUInteger不兼容?
- 25. 是否可以將NSInteger轉換爲NSNumber?
- 26. 關於NSNumber的numberWithDouble
- 27. Xcode 4:未知類型名稱'NSUInteger';你的意思是'NSUInteger'嗎?
- 28. 如何知道$ _GET參數是否等於或不等於
- 29. 在java中檢查對象是否等於不等於覆蓋
- 30. Ansible:檢查是否變量等於串
如果我使用uint64_t,我仍然可以將它保存到核心數據,還是必須將它轉換爲NSNumber? –
@OviSatrob不,我不相信你可以。 – trojanfoe
@OviSatrob:如果您在Xcode中創建託管對象子類時選擇「Use scalar properties for primitive data types」(原始數據類型使用標量屬性)選項,則可以直接存儲uint64_t。 –