-2

Xcode について 2 つの基本的な質問があります。私は Windows 出身で、ほとんどが C# でコードを書いています。

本の最初のサンプル プロジェクトでは、シングル ビュー アプリケーションを作成し、ビューにラベルとボタンをドロップしました。ドラッグして開始とアクションを作成します。最後に、.m ファイルに、ボタン アクション クリックで label.text を変更するコードを記述します。それだけです:ファイル所有者または@propertyを設定しません

次の例では、テキスト ボックスも追加され、label.text が textBox 値で更新されます。ここで気づいたのですが

  • (BOOL)textFieldShouldReturn:(UITextField *)textField {}

textBox を FileOwner にドラッグしないと発生しません。これは、デリゲート処理のために、fileOwner に接続する必要があることを示しています。この仮定は正しいですか?別の例では、チュートリアルで実際にボタンを fileOwner に接続する方法を示しています。なぜそれが必要なのですか?

次の質問: 最初の例では、@property を設定せずに label.text を変更できました。2 番目の例から textBox を読み取ることもできました。別の例では、@propery コードを使用しています。@property について私が理解したことは、C# のゲッター/セッターのようなものです。C# では、他の設定なしで textArea の .text メソッドを取得または設定できました。@property を使用する理由/タイミング。

確かに単純ですが、c# や vb と比較しすぎているのではないかと思います。

更新: 他の 3 冊の本に目を通してみましたが、実際に私が特定のことをしている理由 (つまり、FileOwner へのリンク) を説明しているものはありませんでした。コードをいじった後の FileOwner について少し推測しています。しかし、ボタンを fileOwner にリンクする必要がある理由がわかりません。それをドラッグしてイベントを作成した場合、他に何をする必要がありますか?

@property については、アトミック/非アトミック、リテールを読んで理解しました。私が理解できないのは、ラベル、textArea を読み書きできる場合、なぜ @property が必要なのですか?

質問の言い換え:

label.text = @"Hello"; を取得/設定できる場合 @propery を作成してそのラベルに合成するのはなぜですか? またはユーザー入力のある textArea の場合は?

次へ: チュートリアルで fileOwner にボタンを追加するよう求められるのはなぜですか?

4

1 に答える 1

0

このプログラミング パラダイムは、(タグで示されているように) ios だけでなく、objective-C に限ったものでもありません。元のクラスを変更せずにクラスの動作をカスタマイズできるように、デリゲート パラダイムが存在します。したがって、特定のロジックでは、オブジェクトはそのデリゲートを呼び出して、処理方法に関する指示を取得します。

C# のプロパティと Objective-C のプロパティはほとんど同じです。どちらも、基礎となる getter メソッドと setter メソッドに依存して、クラス内に格納されている (プライベートまたは保護された) 値を操作します。手動の getter メソッドと setter メソッドを使用して同じことを達成することもできます (これは、私が知る限り、ほとんどの古い帽子の C プログラマーが object-c を取り上げ始めたときに行うことです)、KVO (key-値観測)。これは、プロパティの値が変更されたときにイベントを介して監視できるようにする、objective-c のシステムです。また、無意味なコードがたくさんあります...メンバー変数を設定するだけの20個の関数は必要ないため、C#にはコンパイラのショートカットがあります。C# ではこれが{ get; set; }パターンであり、Objective-C では@synthesizeパターンです。

上記の例のように、 text はテキスト フィールドのプロパティであり、 textFieldShouldReturn はbehaviorです。カスタム動作は、主にデリゲート オブジェクトで処理されます。ご存じのとおり、C# にもデリゲートがあります。これらは関数ポインタのようなもので、関数を変数として設定できます。Objective-c のデリゲートの動作は、プロキシ オブジェクト (通常は ViewController ですが、常にではありません) を介して、関数のグループ全体を変数 (オプションのものとそうでないものがあります) として設定するようなものです。

これで問題が解決することを願っています。私は物事を簡潔にまとめるのが得意ではありません。また、Objective-C の前に C# のバックグラウンドを持っていたので、この質問に興味を持ちました。

于 2012-04-15T05:03:28.793 に答える