NSInteger:
#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
由定义可知,在32系统下NSInteger 即为int,在64位系统下NSInteger位long。苹果的官方文档中总是推荐用NSInteger。
总结:NSInteger与int的区别是NSInteger会根据系统的位数(32or64)自动选择int的最大数值(int or long)。
当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。
在开发中只需使用NSInteger即可。
NSNumber:Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:
NSArray *array= [[NSArray alloc]init]; [array addObject:3];//会编译错误
这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘3’不是。这个时候需要用到NSNumber:
NSArray *array= [[NSArray alloc]init]; [array addObject:[NSNumber numberWithInt:3]];
Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。
例如以下封装方法:
+ (NSNumber*)numberWithChar: (char)value; + (NSNumber*)numberWithInt: (int)value; + (NSNumber*)numberWithFloat: (float)value; + (NSNumber*)numberWithBool: (BOOL) value;
将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:
- (char)charValue; - (int)intValue; - (float)floatValue; - (BOOL)boolValue; - (NSString*)stringValue;
相互之间的转换
1: NSString <==> NSInteger
NSInteger转化 NSString类型: [ NSString stringWithFormat: @"%d" , NSInteger]; NSString转化 NSInteger类型: NSInteger = [ NSString intValue ]
2 : NSString <==> NSNumber
将NSNumber转换为NSString NSNumber *A; NSString *B; NSNumberFormatter* numberFormatter = [[NSNumberFormatteralloc] init]; B = [numberFormatter stringFromNumber:A];
将NSString转换为NSNumber NSString *ss=@"224.34129"; NSNumber*result; NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
result=[f numberFromString:ss];
if(!(result))
{
result=ss;
}
NSLog(@"%.2f",[result floatValue]);
3.NSString 与 int ,float,double,NSInteger之间的转换
NSString *teststring = @"32.54" ; int i = [teststring intValue ]; float i1 = [teststring floatValue ]; double i2 = [teststring doubleValue ]; NSInteger i3 = [teststring integerValue ]; NSString *tostring = nil ; tostring = [ NSString stringWithFormat: @"%d" ,i]; NSLog ( @"tostring-int:%@",tostring); tostring = [ NSString stringWithFormat: @"%.3f" ,i1]; NSLog ( @"tostring-float:%@",tostring); tostring = [ NSString stringWithFormat: @"%e" ,i2]; NSLog ( @"tostring-double:%@",tostring);
4.nsstring和float 还有int之间的转换
NSString *tempA = @"123"; NSString *tempB = @"456"; 1,字符串拼接 NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB]; 2,字符转int int intString = [newString intValue]; 3,int转字符 NSString *stringInt = [NSString stringWithFormat:@"%d",intString]; 4,字符转float float floatString = [ newString floatValue]; 5,float转字符 NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];