-5

今日は、CarloChungによる「ProObjective-CDesignPatternsforiOS」を読みました。だから私はアダプタパターンについて読み、このメソッドがプロトコルで宣言されているのを見ました:

-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue;

あなたは本から115ページでそれを見ることができます。使用したこの方法より

[delegate_ command:self didRequestColorComponentsForRed: &redValue
                                                  green: &greenValue
                                                   blue: &blueValue];

そして、118ページのこのメソッドの宣言

-(void) command: (SetStrokeColorCommand *) command
        didRequestColorComponentsForRed: (CGFloat *) red
                                  green: (CGFloat *) green
                                   blue: (CGFloat *) blue
 {
  *red = [redSlider_ value];
  *green = [greenSlider_ value];
  *blue = [blueSlider_ value];
 }

宣言(* red、* green、* blue)の*はどういう意味ですか?&(&redValue ...)はどういう意味ですか?コードに&errorだけが表示されました。

4

2 に答える 2

5

*ポインタ宣言子または間接参照演算子です。宣言では、*はポインター変数を示します。

&演算子のアドレスです。

サイドノート:

より高度な本を試す前に、言語の基本を学ぶ必要があります。

于 2013-02-06T12:31:18.483 に答える
2

一部の人々が指摘しているように、これらはポインタに関連しています。これについては豊富な情報がありますが、初心者の場合は少し混乱するかもしれません。

あなたが知る必要があることを指摘するために...

ほとんどの場合、関数への入力と出力があります。

- (int)roundMyFloat:(float)float;

ここで、入力はfloatであり、出力はintです。

1つのメソッドに複数の出力が必要になる場合があります。一般的な状況は、成功パラメータだけでなくエラーコードも返したい場合です。

- (BOOL)doSomthing:(NSError**)error;

あなたはそうこのように使うでしょう...

NSError* error = nil;
BOOL sucess = [myInstance doSomething:&error];
if (!sucess) 
{
     NSLog(@"Error: %@", error);
}

error'出力パラメータ'として入力します。のコードはdoSomthingエラーを取得し、必要に応じて情報を入力します。

エラーオブジェクトへのポインタが必要であり、エラーオブジェクトは実際にはポインタ自体であるため*、メソッド宣言で2つの'を使用してエラーパラメータを宣言する必要があります。つまり、ポインタへのポインタです。(NSError**)

エラーをメソッドに渡すときは[myInstance doSomething:&error];、シンボルを使用し&て「エラーオブジェクトのメモリアドレスを取得してください」と言います。

あなたの例ではred green、とblueは出力パラメータです。このメソッドdidRequestColorComponentsForRedは、渡す値を変更します。NSErrorred greenとは異なり、blueはオブジェクトではないため、メソッド宣言に必要なスターは1つだけです。CGFloatこれは、「値へのポインタをパラメータとして 受け入れる」ことを示しています。

メソッドを呼び出すときは、NSErrorの例のようにdidRequestColorComponentsForRed、シンボルを使用してカラーコンポーネントを渡します。&これは、私の値のメモリアドレスをCGFloat取得し、それを関数に渡すことを示しています。

&今のところ、構文についてはあまり気にしないでください*。その目的(出力パラメーター)を覚えておいてください。あなたはそれを解決するために最終的にそれについて読むべきです(それは実際にはかなりクールです!)。

それがお役に立てば幸いです-そして質問をすることを恐れないでください。

于 2013-02-06T12:57:32.810 に答える