2014-01-29 24 views

回答

0

只需使用uint64_t(64位無符號整數,與unsigned long long相同)。

除非您將值存儲在Objective-C集合類(例如NSArray)中,否則您不想使用NSNumber,因爲它們是不可變的,這使得它們操作非常困難並且代價高昂。

+0

如果我使用uint64_t,我仍然可以將它保存到核心數據,還是必須將它轉換爲NSNumber? –

+0

@OviSatrob不,我不相信你可以。 – trojanfoe

+0

@OviSatrob:如果您在Xcode中創建託管對象子類時選擇「Use scalar properties for primitive data types」(原始數據類型使用標量屬性)選項,則可以直接存儲uint64_t。 –

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?不,這是平臺相關的,可能是intlong,但不是long long。只要使用unsigned long longtypedef它,例如:

typedef unsigned long long MYULongLong 

你可以使用一個大小類型,如uint64_t,但也有NSNumber沒有匹配尺寸的方法。您可以解決通過使用基於sizeof類別和條件代碼添加這樣的方法來NSNumber - 小心一點,你可以寫這樣所有條件語句編譯期間消失,即作爲一個練習;-)

HTH