2012-05-04 6 views
1

をNSStringのへの:私は次のようにNSStringのにint型にキャストすることはできませんなぜのObjective C - キャスト演算子はintこれは、Objective Cのキャスト演算子の正しい使用方法である

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

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

あなたはこれを行うことはできません:あなたは、メモリアドレス0x1に指し示すNSStringのポインタを作成しているので、

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

NSStringポインタcを使用(「参照解除」)しようとすると、自分のものではないメモリにアクセスしようとしており、segmentation faultが発生します。

EDIT:
Obligatory link to a good article on pointer basics

+2

さらに、プリミティブ値へのポインタを見て、それが実際にオブジェクトへのポインタであることを突然処理する方法を理解できないため、ARCはこの時点でコンパイラエラーを引き起こします。 AKA ARCは、それを保持しているかどうかを知ることができないか、それを追跡する必要があるかどうかを知りません。 ARCがなければ、あなたのコードはうまくコンパイルされますが、上記の理由でクラッシュするでしょう。 –

+1

@JackLawrence +1、よく言われています。 –

+0

@ inspector-gあなたは説明してください。私はそれをはっきりと理解できません=) – luca