NSNumber和NSValue對基礎C數據類型的對象化封裝
NSNumber和NSValue都能將C中的基本數據類型轉化成Objective-C中的對象。
1、基本數據類型和NSValue
①基本數據類型轉化成NSValue
NSValue *value = [NSValue valueWithBytes:&result objCType:@encode(int)];
其中,result是基本數據的值,int是我們要轉化的基本數據類型
②NSValue轉化成基本數據類型
[value getValue:&result];
其中,value是一個NSValue類型的對象,result是一個已知的類型的基本數據類型。經過這樣的轉化,NSValue中保存的數值就放到了result中了。
2、基本數據類型和NSNumber
NSNumber是NSValue的子類,它的出現我理解的就是更加方便了除結構體以外的C中的基本數據類型和Objective-C中對象的相互轉化,NSNumber本身提供了很多類方法和實例方法,可以完成這些操作。
①基本數據類型轉化成NSNumber
NSNumber *number = [NSNumber numberWithInt:3];
這樣就將int型的數據轉化成了NSNumber
②NSNumber轉化成基本數據類型
NSInteger result = [number integerValue];
同樣十分方便,就取出了NSNumber中保存的數值。
3、NSInteger
在這裏順便提一句NSInteger吧,這是一個有符號型int,它與int的區別就在於NSInteger可以自動識別機器是32位還是64位。官方文檔是這樣寫的:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
另外,NSInteger的無符號版本是NSUInteger,官方文檔中如是定義:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif
----by wangzz