當我使用這個說法爲什麼一個數組元素轉換爲整數工作,另一個現在工作?
int test=(int)[myArray objectAtIndex:2];
以後使用「測試」傳遞給其他命令fails.However的,這句話適用
int test=[[myArray objectAtIndex2]intValue];
是什麼區別轉換一個數組元素爲整這兩種轉換?
當我使用這個說法爲什麼一個數組元素轉換爲整數工作,另一個現在工作?
int test=(int)[myArray objectAtIndex:2];
以後使用「測試」傳遞給其他命令fails.However的,這句話適用
int test=[[myArray objectAtIndex2]intValue];
是什麼區別轉換一個數組元素爲整這兩種轉換?
第一個是演員。你正在把這個對象轉換爲一個int值,這會給你一個包含對象地址的int值(在64位以下,它只包含地址的低32位)。這完全不是你想要的。
第二個是一個方法調用-intValue
,這是由NSNumber
(和NSString
)來實現,以返回該NSNumber
(或NSString
)對象表示int
。這(大概)是你真正想要的。
第一條語句不是轉換。它是存儲在數組中的元素2的指針。該語句只是將該指針的值(轉換爲int
)賦值給該變量。
第二個陳述是對話。它調用-intValue
存儲在該索引處的指針2指向的對象(可能是NSNumber
實例)。
- intValue
適用於NSString *
和NSNumber *
類型的物體。
如果你的對象實際上是@"123"
,或[NSNumber numberWithInt:123]
,而不是僅僅int 123
,然後使用- intValue
將其轉換爲123
。如果您嘗試直接使用(int)
進行投射,並且它是以上兩種類型之一,那麼您將遇到錯誤,並將其作爲int
(因爲它不是,這是更復雜的類型)。