私の好みは#3です:
// MyClass.m
...
@implementation MyClass {
int someMember;
}
@end
それはあなたがきれいにうまく抽象化し、依存関係を最小限に抑えることを可能にします。
すべてのobjcオブジェクトは動的に割り当てられ、物理的な依存関係はほとんどないため、ビルド時間が最短になり、オブジェクト表現が最も豊富になり、コンパイルのオーバーヘッドが最小限に抑えられます(たとえば、最小#import
のsと物理的な依存関係)。
抽象化も大きなプラスです。privateがデフォルトであり、それから逸脱する理由はほとんどなく、内部を他の人に公開する理由もほとんどありません。これにより、型の安全性が損なわれないようにしながら、すべてが非常にうまく隠されます。大きなプラス:すべてのC ++ライブラリの依存関係に全員をさらすことなく、オブジェクトでC ++値を簡単に宣言することもできます。PIMPL、グローバルスコープの構造体、* void **ではなく、適切な値です。これは優れたコンパイルファイアウォールです。大規模なCまたはC++プロジェクトに取り組んだことがある場合は、喜ぶかもしれません。
もちろん、オプション#2に見られるようにivarsを宣言すると、これらすべてがもたらされます。したがって、変数をどこでどのように表示するかによって大きく異なります。ivar宣言は具象ですが、プロパティは抽象化される可能性があります。したがって、具象を具象でグループ化し、インターフェースをインターフェースでグループ化することを好みますが、どちらの方法でもかまいません。下位互換性が必要でない限り、#2または#3が理想的です。
(疑似)プライベートプロパティが必要な場合は、クラスの継続で宣言することをお勧めします。
// MyClass.m
...
@interface MONClass ()
@property (nonatomic, copy) NSString * string;
@end