OC中对象强转到基本数据类型的值是怎么来的?

无敌鲨鱼炮
  • 448

如图:
clipboard.png

这个值是怎么得出来的?
注:这个值还会变。。。

回复
阅读 2.8k
5 个回答
✓ 已被采纳

array.firstObject@"1", 是一个NSStrng对象, (int)NSString对象的意思是取对象地址进行强转为int

由于NSSring是存在内存的数据区, 所以以下代码打印结果是一样的

NSString *str = @"1";
NSArray *arr = @[@"1"];
int a = (int)str;
int b = (int)arr.firstObject;
NSLog(@"a = %zd",a);
NSLog(@"b = %zd",b);

普通类型,像int、bool、double、枚举等,都是要封装成对象放到容器(NSArray、NSDictionary)里,对象和普通类型是不能加个(int)这个强转的,这时这时把对象当指针来处理,也就是得到指针的值,也是指针指向内存的地址。NSString转int用[a intValue]。

xiacheng
  • 5
新手上路,请多包涵

你取出的firstObject是一个NSString对象,(int)aString,相当于你把aString的地址转换为int类型,所以值不是你想要的而且会变。
如果要从NSString对象中取出数值,可以用[aString intValue]的方式。


int num = [array.firstObject intValue];

两者类型不一样,要转换得用oc的方法,不能直接强转

你的array.firstObjectNSString类型的,即字符串。字符串是存在常量区的,用(int)array.firstObject取得的是地址,并非值。正确的做法是使用intValue,即[array.firstObject intValue]即可得到正确的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏