0

問題

この署名を使用してインターフェイスを作成したいが、自動合成されたインスタンス変数は使用しない:

@interface MyObject : NSObject
@property (nonatomic, copy) NSArray *values;
@end

質問:

独自のゲッターとセッターを実装したいので、インスタンス変数を使用しないため、インスタンス変数が.m @implementaionで自動合成されるのを防ぐことは可能ですか?

理由:

その理由は、データがプレーン バイト アーカイブに格納されるため、メモリ オーバーヘッドを持ちたくないからです。同時に、ユーザーに実装の問題を知られたくないし、インターフェイスの署名を変更しないでおいてほしい。

@implementation MyObject {
    NSData *_data
{
- (NSArray *)values
{
    // Generate NSArray from _data
}
- (void)setValues(NSArray *)values
{
    // Set _data from values
}
#pragma mark - Hidden init
- (id)initWithData:(NSData *)data
{
    // Set _data
}
@end
4

3 に答える 3

2

getter と setter の両方を自分で実装すると、インスタンス変数は合成されません。

于 2013-11-07T11:54:01.357 に答える
0

他の人が言ったように、セッターとゲッターをオーバーライドすると、コンパイラーは他に何もしません。だからあなたが望むもの..はあなたがタイプしたものです。

于 2013-11-07T11:56:56.607 に答える
0

作成したくない場合は、インスタンス変数のみを作成してください。

@interface MyObject : NSObjet
 {
 NSArray *values;
}
@end
于 2013-11-07T12:01:39.173 に答える