職場でのプロパティとインスタンス変数の使用に関する議論がありましたので、そのためのwikiの回答を探したいと思います。さて、私は客観的にprivateなメンバー型がないことを知っています.c全てがかなり公表されています。しかし、私はクラスをデザインし、OOPの原則に準拠する方法について少しは心配しています。私的なメンバーと公的なメンバーは、どのように客観的に実装されるべきですか?
A.様々な投稿や新しいスタンフォード大学のiPhone開発コースによれば、できる限りの場所で常にプロパティを使用する必要があります。しかし、IMHOでは、このアプローチはOOP設計原則を制動します。この場合、すべてのメンバーが公開されるからです。内部/ローカルのインスタンス変数をすべて外部に公開する必要があるのはなぜですか?また、ローカルのivarを直接使用する代わりに、プロパティを介して合成されたsetterを使用すると、ごくわずかな(ただしまだ)オーバーヘッドがあります。
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
B.別のアプローチは、プライベートメンバーの(相対的なプロパティを宣言せず)ヘッダファイルにアイバーズを宣言し、同じヘッダファイルで、(相対アイバーズを宣言せずに)純粋なプロパティを宣言することである:ここでサンプルですパブリックメンバー。そのような場合には、イナバルがクラス内で直接使用されます。この方法は理にかなっていますが、新しい値を設定する前に古い値を手動で解放する必要があるため、プロパティのすべての利点を使用しません。
//==== header file =====//
@interface MyClass : NSObject{
NSString *_privateMember;
}
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
C.は、ヘッダファイルのパブリックメンバーの(相対アイバーズを宣言せずに)純粋なプロパティを宣言し、実装ファイルにプライベートインターフェイスでプライベートメンバーの(相対アイバーズを宣言せずに)純粋なプロパティを宣言する:ここでサンプルです。このアプローチは最初のIMHOよりもはっきりしていますが、同じ質問が残っています。なぜ内部/ローカルメンバーのプロパティを持つ必要がありますか?ここではサンプルです:
//==== header file =====//
@interface MyClass : NSObject
@property (nonatomic, retain) NSString *publicMemberWithProperty;
@end
//==== implementation file =====//
@interface MyClass()
@property (nonatomic, retain) NSString *propertyForPrivateMember;
@end
この決定の自由度は私に少し不愉快にさせると私は物事が行われるべきかについてのそれぞれの供給源からの確認を見つけるしたいと思います。しかし、私はApple docsにそのような厳しい声明を見つけることができませんでした。もしあればapple docsへのリンクやそれをクリアする他の理論に投稿してください。
この質問は非常に主観的で、正しい方法で答えるのは不可能だと思われます。 – Till
質問は非常に簡単です。つまり、私的なメンバーと公的なメンバーを客観的にどのように実装すればよいのでしょうか。 – Centurion
私は異なっていると思っていますが、議論を深めません。あなたの主張を証明するためのヒントとして、 Stanfordコースではあらゆる場所でプロパティを使用することをお勧めします。 – Till