2012-04-28 19 views

答えて

3

括弧はキャスト演算子を構成します。私。 (NSString*) nameは、コンパイラがnameをNSStringへのポインタとして解釈する必要があることを意味します。一方、(NSString) *nameは、コンパイラが逆参照された値(つまり、値nameを指す)をNSStringとして解釈する必要があることを意味します。

+0

をしかし、Objective-Cのクラスはかなりのポインタとして以外に使用されることはありませんから、NSString' 'にキャスト' * NAME'は、あなたがやるべきではありません何かあるか見ます。 –

+0

@KenThomases Objective-Cは、クラスタイプを直接使用することはほとんどないタイプを使用する**の**スタイル**を推奨します。しかしながら、それは禁止されておらず、例えば内省のために有用であり得る。そして私は、「悪だ、しない」という種類の代わりに、何が起こっているのかを説明する答えを提供することを好む。 – Matthias

3

(NSString)*nameを使用する必要はありません。 NSString *はタイプ:NSStringのインスタンスへのポインタです。したがって、このようなメソッドの宣言に:

- (NSString *)capitalisedString: (NSString *)string 

たび(NSString *)は、それが「次のものがNSString *を入力している」という意味が表示されます。最初の1つはメソッドの戻り値がNSStringインスタンスであることを意味し、2番目の引数はstringの型がNSStringインスタンスであることを意味します。

この説明は、変数を特定の型のものとして扱うようにコンパイラに指示するときにも適用されます。 NSString *がタイプですので、あなたは次のようにキャストします:

id object = //... 
NSString *myString = (NSString *)object; 
関連する問題