3

私はまだObjective-Cを学んでいますが、学んだことすべての背後にある「理由」を知りたいです。

Objective-Cメソッドでタイプを括弧で囲む必要がある理由を知りたいのですが、次のようになります。

- (IBAction) myAction: (UIButton *) sender;

それ以外の:

- IBAction myAction: UIButton *sender;

私は答えを見つけてそれについてかなり考えましたが、その理由が何であるかがわかりません。

私が困っているのは、アスタリスク(*)が括弧内にある必要があることを実際に忘れてしまうことです。誤って次の誤った署名を入力してしまうこともあります。

- (IBAction) myAction: (UIButton) *sender;

私に関して言えば、これは引数が型ではなくポインタであることをより論理的に表しています。

4

1 に答える 1

4

これは C のキャスト構文です。

int foo = (int)bar;

パラメータと戻り値を特定の型にキャストすると考えてください。

Objective-C の初期の頃、戻り値とパラメータはデフォルトでid型に設定されていました。したがって、次のようなメソッド宣言が表示されます。

-myAction:sender;

さまざまな理由から、Objective-C コードでは戻り値とパラメーターを厳密に型指定することが推奨されるようになり、すべての戻り値とパラメーターが厳密に型指定されるようになりましたid

- (IBAction)myAction:(id)sender;

アスタリスクも C 構文です。 および とUIButton*は異なる特定の型です。あなたはこれを行うことができます:UIButtonUIButton**

typedef UIButton* UIButtonRef;

そして、UIButtonRef代わりに使用しますUIButton*

- (IBAction)myAction:(UIButtonRef)sender;
于 2012-12-13T05:55:52.470 に答える