0

主な違い/プロセスを理解しています。プロパティは、クラス変数のゲッターとセッターを作成します。_また、(現在)プレフィックス付きのプライベート変数で合成します。

偉大な。

ここで、いくつかのメソッドをプロパティのように機能させたいと考えています。したがって、サブビューUIViewを持つサブクラスがあります。UILabel

UILabel のテキストを設定および取得するために、2 つのメソッド- (NSString *)textを作成したいと考えています。setText:(NSString *)text

明らかに、これはプロパティのように機能しているため (実行可能であり[myCustomElement text][myCustomElement setText:@"whatever"])、プロパティを定義する必要があるように感じますが、もしあれば、これはどのような用途に使用されますか?

私のゲッターとセッターは次のようになります。

- (NSString *)text {
    return self.textLabel.text;
}

- (void)setText:(NSString *)text {
    self.textLabel.text = text;
}
4

6 に答える 6

4

これを行うこともできますが、そうしないことをお勧めします。標準のアクセサー メソッド (getter と setter) のように見えても、実際には UI コントロールを更新するメソッドを持つことは、将来的に混乱の元になるだけです。これは、メソッドが従来の慣行に準拠しない機能を実行している場合にのみ、コードの可読性を損ないます。さらに、すでに のプロパティを持っているtextLabelので、これらのメソッドはあまり役に立ちません。

ところで、標準の自動生成されたアクセサー メソッドは、他の便利な機能を提供します (プロパティを定義するときに指定した修飾子に基づいて必要なメモリ管理を行い、そのような機能が必要になる可能性のある将来の日付のキー値の監視を有効にします。など)、したがって、これらの概念の専門家でない限り、それらを独自の方法に置き換えることは控えます.

標準のアクセサー メソッドとは異なることを行っている場合は、将来的に混乱の原因となる可能性が低いメソッド名を使用することをお勧めします。

于 2013-02-05T14:24:11.253 に答える
1

もしあれば、これはどのような用途がありますか?

多くの用途があります:

1)プロパティを使用して、いくつかの計算、オブジェクトの状態の更新、またはキャッシングのようなものを実行できます。

2) CocoaのKey-Value Coding (KVC)Key-Value Observing (KVO)について聞いたことがありますか? それらはプロパティに依存しています。チェック: KVC プログラミング ガイドおよびKVO プログラミング ガイド

3)プロパティを使用して、アクセサーにメモリ管理コードを入れることができます。

于 2013-02-05T14:29:05.900 に答える
1

text はすでにyourCustomElementプロパティtextLabelのプロパティ ( textと呼ばれます) です(そのため、ドット表記yourCustomElement.textLabel.textを使用してアクセスします)

この例では、テキスト プロパティのゲッター/セッターは、textLabel クラス内にのみ存在する必要があります。

これらの 2 つのメソッドは、プロパティのプロパティを設定/取得するための便利なメソッドです (問題ありませんが、getter/setter ではなく、それらを見てはいけません)。

于 2013-02-05T14:23:48.073 に答える
1

あなたの特定の例では、プロパティを定義しなくても問題ないと思います。

プロパティ (私が解決できる限り) は、フードの下で適切な保持/解放 (適切な場合) を確実にする便利な省略形を提供します。

http://useyourloaf.com/blog/2011/02/08/understanding-your-objective-c-self.html

于 2013-02-05T14:24:44.217 に答える
0

プロパティとして宣言し、ゲッター/セッターをオーバーライドすると、ドット表記を使用して値を変更または取得できます。

元:

myCustomElement.text = @"whatever";
于 2013-02-05T14:22:34.597 に答える
-1

長い話短い: @synthesis は getter と setter を生成します。そのため、合成を使用すると、入力の手間が省けます。

@synthesis textLabelただし、コードはラベルテキストの変更のみを許可するため、コードは同じではありません。@synthesis では、すべてのプロパティを変更できます。

@synthesis / getters / setters に関する役立つ情報を次に示します。

http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html

于 2013-02-05T14:21:35.893 に答える