鍍金池/ 問(wèn)答/C  iOS/ OC中對(duì)象強(qiáng)轉(zhuǎn)到基本數(shù)據(jù)類(lèi)型的值是怎么來(lái)的?

OC中對(duì)象強(qiáng)轉(zhuǎn)到基本數(shù)據(jù)類(lèi)型的值是怎么來(lái)的?

如圖:
clipboard.png

這個(gè)值是怎么得出來(lái)的?
注:這個(gè)值還會(huì)變。。。

回答
編輯回答
青檸

array.firstObject@"1", 是一個(gè)NSStrng對(duì)象, (int)NSString對(duì)象的意思是取對(duì)象地址進(jìn)行強(qiáng)轉(zhuǎn)為int

由于NSSring是存在內(nèi)存的數(shù)據(jù)區(qū), 所以以下代碼打印結(jié)果是一樣的

NSString *str = @"1";
NSArray *arr = @[@"1"];
int a = (int)str;
int b = (int)arr.firstObject;
NSLog(@"a = %zd",a);
NSLog(@"b = %zd",b);
2017年3月22日 08:04
編輯回答
笑忘初

你取出的firstObject是一個(gè)NSString對(duì)象,(int)aString,相當(dāng)于你把a(bǔ)String的地址轉(zhuǎn)換為int類(lèi)型,所以值不是你想要的而且會(huì)變。
如果要從NSString對(duì)象中取出數(shù)值,可以用[aString intValue]的方式。

2017年11月22日 17:36
編輯回答
我不懂

你的array.firstObjectNSString類(lèi)型的,即字符串。字符串是存在常量區(qū)的,用(int)array.firstObject取得的是地址,并非值。正確的做法是使用intValue,即[array.firstObject intValue]即可得到正確的值。

2017年6月22日 10:34
編輯回答
玩控

普通類(lèi)型,像int、bool、double、枚舉等,都是要封裝成對(duì)象放到容器(NSArray、NSDictionary)里,對(duì)象和普通類(lèi)型是不能加個(gè)(int)這個(gè)強(qiáng)轉(zhuǎn)的,這時(shí)這時(shí)把對(duì)象當(dāng)指針來(lái)處理,也就是得到指針的值,也是指針指向內(nèi)存的地址。NSString轉(zhuǎn)int用[a intValue]。

2018年2月3日 17:59
編輯回答
臭榴蓮

int num = [array.firstObject intValue];

兩者類(lèi)型不一樣,要轉(zhuǎn)換得用oc的方法,不能直接強(qiáng)轉(zhuǎn)

2017年7月28日 10:40