最新バージョンの Xcode (4.2 以降に関するもの) を使用する場合、ヘッダーで iVar を宣言する必要はありません。一般にアクセス可能なものはすべて、プロパティとして宣言する必要があります。
多くの人は、Objective C オブジェクトが実際には C 構造体へのポインターであることを忘れています。そのため、ヘッダーで宣言されている iVar には、.getter と setter を使用して直接アクセスできますmyObject->myPublicIVar
。特に非 ARC コードでは、これは非常に危険です。この@private
ディレクティブは、->
オペレーターを使用して iVar にアクセスすることを防ぎますが、それでもヘッダー ファイルを乱雑にします。@private
より良い方法があるときは意味がありません。
プライベートなものはすべて、.m ファイル内で宣言する必要があります。多くの場合、これには次のようなクラス拡張が必要です。
// The .h file
@interface Foo : NSObject
@property (nonatomic, strong) NSString *myPublicString;
@end
// The .m file
@interface Foo ()
@property (nonatomic, strong) NSString *myPrivateString;
@end
@implementation Foo {
NSString *myPrivateIVar;
}
// Xcode 4.5 or later will not require these @synthesize
@synthesize myPublicString = _myPublicString;
@synthesize myPrivateString = _myPrivateString;
@end
このような実装は、iVar に基づくパブリック プロパティ、iVar に基づくプライベート プロパティ、およびプライベートな独立 iVar を提供します。@synthesize ディレクティブを含めましたが、最新のツールを使用する必要はありません。