2

したがって、ガイドラインには次のように書かれています。

iOS でのみ実行されるコードの場合、自動合成されたインスタンス変数を使用することをお勧めします。

インスタンス変数を合成するときは、 @synthesize var = var_; を使用します。これにより、誤って var = blah; を呼び出すのを防ぐことができます。とき self.var = 何とか; 意図されています。

 // Header file
@interface Foo : NSObject
// A guy walks into a bar.
@property(nonatomic, copy) NSString *bar;
@end

// Implementation file
@interface Foo ()
@property(nonatomic, retain) NSArray *baz;
@end

@implementation Foo
@synthesize bar = bar_;
@synthesize baz = baz_;
@end

質問は、これはパブリック変数のみに適用されるのですか、それともプライベートにも適用されますか? ドキュメントではあまり明確ではありませんが、なぜ「もし」これがパブリックのみまたはプライベートのみであるかについて、いくつかの考えや視点を持ちたいですか? ivar を台無しにしたり、プロパティを使用したりしないように、すべてのパブリック/プライベートにとって理にかなっていると思います

4

2 に答える 2

1

問題の変数がパブリックかプライベートかは特に問題ではないと思います。別の名前で合成することにより、生成されたアクセサー メソッドを使用する代わりに変数に直接アクセスする場合が明確になります。

おそらく、あなたが求めていることの根底にある別の質問があります:私は通常、アクセサーを介して、または直接プライベート ivar にアクセスする必要がありますか? 熟練した iOS 開発者のほとんどは、特別な理由 (パフォーマンス、KVO などの副作用の回避など) がない限り、アクセサーを使用する傾向があると思います。そうすることで、将来性が高まり、基盤となる実装の柔軟性が高まります。非常に小さい方法で、実装ではなくインターフェイスにコーディングしています。

また、Clang のデフォルトの動作が将来変更され、プロパティをサポートする ivar が_foo デフォルトで合成されるようになることも指摘しておく価値があるかもしれません。明らかに、検討中の権力者は、ivar を強調することがベストプラクティスであると考えています。

于 2012-05-24T22:56:13.703 に答える
0

その多くは個人的な好みによるものだと確信しているので、ここに私の価値があるものを示します。

  • パブリック プロパティと「プライベート」インスタンス変数を区別するのが好きです。
  • プロパティは、初期化を除いて、常にアクセサーを介してアクセスされます (明白な理由により、手動で作成されたアクセサー メソッド内で)。したがって、バッキング ivar のアンダースコアは便利であり、プロパティを日常的に使用する上で実際には問題になりません。
  • インスタンス変数は、メソッドで内部的に使用される状態を保持するために使用されますが、他のクラスによって (直接) 使用されることはありません。
  • .m ファイルでインスタンス変数を宣言するのがとても好きになりました。素晴らしく、きれいで、簡単です (ivar を宣言するために .h と .m の間を行き来する必要はありません)。
  • この区別は、私の心をクリアにし、プロパティが外部のエージェントが直接取得および/または設定する必要があるもの (.h 内のプロパティ) であるかどうか、またはメソッドの実装を機能させるための単なる助けであるかどうかを判断するのに役立つことがわかりました ( .m の ivar)。

Paul.sに同意します。その一貫性はあなたの友達ですが、私にとっては区別も友達です。

于 2012-05-24T22:24:12.257 に答える