2012-05-04 57 views
1

這是目標C轉換運算符的正確用法:目標C - 鑄造操作int值的NSString

//casting an int to float 
int a = 1; 
float b = (float) a; 

爲什麼不能投一個int以下文的NSString:

int a = 1; 
NSString *c = (NSString *)a; 

//I receive the error : "cast of 'int' to 'nsstring' is disallowed with ARC" 

做這些事情在概念上是錯誤的?

P.S.我已經知道我應該使用「c = [NSString stringWithFormat:@」%i「,a];」!

+0

只是它是編譯器支持或提供的方式/語法。 –

回答

3

你不能做到這一點:

int a = 1; 
NSString *c = (NSString*)a; 

,因爲你正在創建NSString指針指向的內存地址爲0x1。當您嘗試使用(「取消引用」)NSString指針c時,您試圖訪問不屬於您的內存,並且會出現segmentation fault

編輯:
Obligatory link to a good article on pointer basics

+2

此外,ARC在這一點上導致編譯器錯誤,因爲它不知道如何處理查看指向原始值的指針,然後突然被告知它實際上是指向對象的指針。 AKA ARC不知道它是否可以調用保留/釋放,或者它是否需要跟蹤它。沒有ARC,你的代碼會很好的編譯,但是你會因爲上面的原因而崩潰。 –

+1

@JackLawrence +1,說得好。 –

+0

@ inspector-g請你解釋一下..我沒有清楚=) – luca