私は Objective-C のプログラミングを始めたばかりで、Java の経験もあるので、Objective-C プログラムを作成する人がプライベート メソッドをどのように扱うのか疑問に思っています。
さまざまな慣習や習慣があるかもしれないことは理解していますが、この質問を、Objective-C でプライベート メソッドを扱う際に人々が使用する最良の手法の集合体として考えています。
投稿する際には、あなたのアプローチの根拠を述べてください。なぜそれが良いのでしょうか? (あなたが知っている限り) どのような欠点があり、どのように対処しますか?
これまでの私の発見について。
使用可能カテゴリー[例: MyClass (Private)] は、プライベート メソッドをグループ化するために MyClass.m ファイルで定義されます。
このアプローチには 2 つの問題があります。
- Xcode (およびコンパイラ?) は、対応する @implementation ブロックですべてのメソッドをプライベート カテゴリに定義しているかどうかをチェックしません。
- MyClass.m ファイルの先頭にプライベート カテゴリを宣言する @interface を配置する必要があります。そうしないと、Xcode は「self がメッセージ "privateFoo" に応答しない可能性があります」のようなメッセージを表示します。
最初の問題は、空のカテゴリ[例: MyClass()]。
2 番目は非常に気になります。プライベート メソッドがファイルの最後近くに実装 (および定義) されていることを確認したいのですが、それが可能かどうかはわかりません。
ベストアンサー1
他の人がすでに述べているように、Objective-C にはプライベート メソッドというものはありません。ただし、Objective-C 2.0 (Mac OS X Leopard、iPhone OS 2.0 以降) 以降では、空の名前 (つまり@interface MyClass ()
)を持つClass Extensionというカテゴリを作成できます。クラス拡張のユニークな点は、メソッドの実装がパブリック メソッドと同じ場所になければならないことです@implementation MyClass
。そのため、私はクラスを次のように構成します。
.h ファイル内:
@interface MyClass {
// My Instance Variables
}
- (void)myPublicMethod;
@end
.m ファイルでは次のようになります:
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPublicMethod {
// Implementation goes here
}
- (void)myPrivateMethod {
// Implementation goes here
}
@end
このアプローチの最大の利点は、メソッドの実装を (場合によっては恣意的な) パブリック/プライベートの区別ではなく、機能別にグループ化できることだと思います。