Objective-C学习笔记-NSNumber与NSInteger
1.由于Objective-C是C的超集,所以C支持的基本数据类型,OC也支持,而NSNumber就是对这些基本数据类型的封装,例如char,short,int,float
2.NSNumber可以通过下面两种方法初始化
NSNumber n=[NSNumber numberWithInteger:100]; NSNumber k=[[NSNumber alloc] initWithInt:999];
其他数据类型还有
+ (NSNumber *)numberWithChar:(char)value; + (NSNumber *)numberWithUnsignedChar:(unsigned char)value; + (NSNumber *)numberWithShort:(short)value; + (NSNumber *)numberWithUnsignedShort:(unsigned short)value; + (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithUnsignedInt:(unsigned int)value; + (NSNumber *)numberWithLong:(long)value; + (NSNumber *)numberWithUnsignedLong:(unsigned long)value; + (NSNumber *)numberWithLongLong:(long long)value; + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; + (NSNumber *)numberWithFloat:(float)value; + (NSNumber *)numberWithDouble:(double)value; + (NSNumber *)numberWithBool:(BOOL)value;
- (NSNumber *)initWithChar:(char)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithUnsignedChar:(unsigned char)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithShort:(short)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithUnsignedShort:(unsigned short)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithInt:(int)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithUnsignedInt:(unsigned int)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithLong:(long)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithUnsignedLong:(unsigned long)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithLongLong:(long long)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithUnsignedLongLong:(unsigned long long)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithFloat:(float)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithDouble:(double)value NS_DESIGNATED_INITIALIZER; - (NSNumber *)initWithBool:(BOOL)value NS_DESIGNATED_INITIALIZER;
3.NSNumber不支持加减乘除,如果需要做这些运算,可以使用它们的属性
@property (readonly) char charValue; @property (readonly) unsigned char unsignedCharValue; @property (readonly) short shortValue; @property (readonly) unsigned short unsignedShortValue; @property (readonly) int intValue; @property (readonly) unsigned int unsignedIntValue; @property (readonly) long longValue; @property (readonly) unsigned long unsignedLongValue; @property (readonly) long long longLongValue; @property (readonly) unsigned long long unsignedLongLongValue; @property (readonly) float floatValue; @property (readonly) double doubleValue; @property (readonly) BOOL boolValue;
4.NSNumber常用方法有两个
- isEqualToNumber,和另外一个NSNumber比较,相同则返回true,不相同返回false
- compare,和另外一个NSNumber比较,返回值是一个枚举类型,NSOrderedAscending(小) NSOrderedSame(相等)NSOrderedDescending(大)
- (BOOL)isEqualToNumber:(NSNumber *)number;
- (NSComparisonResult)compare:(NSNumber *)otherNumber;
5.还会经常用到的类型有NSUInteger和NSInteger,不要以为前面带上了NS就是类,其实这两个是使用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