誰かがこの2つのスニペットの違いを明らかにするでしょうか?私はこれを知っているこのObjective-C構文の意味は何ですか?
は、インスタンス化したものです:
Class *myClass = [[Class alloc] init] ....etc
が、まさにこれを何ですか?
(Class *)myClass .....etc
あなたが言うように感謝
誰かがこの2つのスニペットの違いを明らかにするでしょうか?私はこれを知っているこのObjective-C構文の意味は何ですか?
は、インスタンス化したものです:
Class *myClass = [[Class alloc] init] ....etc
が、まさにこれを何ですか?
(Class *)myClass .....etc
あなたが言うように感謝
最初の1、与えられた正しい構文は、インスタンス化されます。
もう1つは、変数 "myClass"をClassオブジェクトのインスタンスへのポインタにキャストしています。
2番目のスニペットは、キャストまたはメソッドのパラメータのいずれかです。インスタンス化とは何の関係もありません。
メソッド宣言で(Class *)myClass
が発生した場合は、メソッドのパラメータの型を定義するだけです。たとえば、- (void) method:(Class *)myClass
は、voidを返し、タイプClass*
の1つの引数を取るメソッドです。
(Class *)myClass
が他のコードで発生した場合、それはキャストです。基本的には、タイプClass
のオブジェクトへのポインタとして、myClass
を実際のタイプに関係なく再解釈すると言います。数字付きのキャストのようなものです。がint
の場合、(float)x
はfloat
とキャストして浮動小数点演算で使用できます。
一般的に言えば、Objective-Cオブジェクトで大量にキャストを使用しないように注意してください。 1つの場所は、このようなものを表示します。(CFURLRef)[NSURL fileURLWithPath:path]
のように、NSオブジェクトをCFオブジェクトにキャストすることです。しかし、ほとんどの場合、異なるタイプのオブジェクトは適切にキャストされません。
また、最初のスニペットにエラーがあります。実際には[[Class alloc] init]
になります。 alloc
に電話をしてからinit
に電話する必要があります。 [init]
は意味がありません。Objective-Cの構文はまったく適合しません。
2番目のスニペットはCスタイルのキャストです。これは、宣言された型にかかわらず、クラス*の値としてmyClassを扱うようにコンパイラに効果的に指示します。残りのスニペット(および前のmyClassの宣言)がなければ、なぜあなたがキャストを使用したいのか、それがどのような効果を持つのかを言うことは不可能です。