NSNumber 與 NSInteger

在 Mac OSX 10.5 中新增加了 NSInteger 這個東西,但是這下就會跟 NSNumber 搞混,到底要用哪個?

基本上,NSInteger(以及類似的 NSUInteger)是為了解決在 32-bit/64-bit CPU 架構下,int 長度不同的問題,它的定義如下:

#if __LP64__ || NS_BUILD_32_LIKE_64  
  typedef long NSInteger;  
  typedef unsigned long NSUInteger;  
#else  
  typedef int NSInteger;  
  typedef unsigned int NSUInteger;  
#endif

也就是說,NSInteger 只是用 typedef 包裝過的 int/long,它是個基本資料型別(data type)。

NSNumber 則是個不折不扣的 Objective-C 類別,因此這兩者的使用時機就很明顯了,當你要把 integer 放到 Obj-C 的集合,例如 NSArray/NSSet 時,請用 NSNumber,不然其他的時候用 NSInteger 就好了。

Contents

comments powered by Disqus