先贴代码:
import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSNumber* intNumber=[NSNumber numberWithInt:10];
NSInteger value_1=[intNumber integerValue];
NSInteger value_2=(int)intNumber;
NSLog(@"value_1=%ld,value_2=%ld",(long)value_1,(long)value_2);
}
return 0;
}
输出的结果为:
2015-10-14 22:36:11.096 Data[8213:381135] `value_1=10,value_2=2599`
Program ended with exit code: 0
为什么是value_1
与value_2
的值不一样呢?这也是我在写项目时遇到的问题,先解释下知识点:
其中,NSInteger
、CGFloat
是基本数据类型,而NSValue
、NSNumber
是包装类,NSValue
是NSNumber
的父类。
理解了这些知识点后,不难理解上面的代码的输出结果,NSNumber是个对象,不能直接通过(int)来转换,而只能通过[Number integerValue]
方法来获取值。