0

MyClass の文字列値が変更されたときに、いくつかのコードを追加する必要があります。そこで、MyClass の文字列プロパティ メソッドをオーバーライドしようとしています。しかし、私にはわかりません..だから私はフォローするのが好きです。それが正しいか?

プロパティのメソッドをオーバーライドするには?

@interface MyClass{
     NSString *string;
}

@property(retain, nonatomic) NSString *string;
@end


@implementation MyClass

- (void)setString:(NSString*)newString{
    // want to add some codes.

    [self setString:newString];  <= Is this correct?
}

@end
4

2 に答える 2

0

あなたがやろうとしていることは、オーバーライドしないことです(コードスニペットにサブクラスは含まれていません)。

コードに含まれているのは、宣言@interfaceと定義だけ@implementationです。.hこれは、宣言をファイルに入れ、定義をファイルに入れるCの宣言/定義と同じ意味と有用性を持ってい.cます。

あなたが合成方法について話していると仮定すると、あなたのコードはほぼ正しいです。あなたはゲッター- (NSString *) string;またはそれが読み取り専用のものを見逃しているだけです。

割り当てを正しく行う方法については、=

- (void)setString:(NSString*)newString{
    // want to add some codes.

    string = newString;  // Correct way of doing it
}

セッターとゲッターを手動で定義するか、構文糖衣を使用して、プロパティを合成する2つの方法があります@synthesize

理解を深めるために、@property@synthesizeは両方とも糖衣構文であると考えてください。(それだけが@property、retain、strongなどのキーワードでセマンティックを追加しています)。

あなたが見つけることができるドキュメントを読むことをお勧めします。あなたがより多くの詳細を持つことができる多くの見つけやすいウェブページがあります。

于 2012-09-13T12:44:39.883 に答える
0
- (void)setString:(NSString*)newString{
    // want to add some codes.

    string = newString;  //This is the setter method!
    // You will need to consider memory management etc. 
}

あなたがおそらくもっとしているのはこれです:

- (void)setString:(NSString*)newString{
    // want to add some codes.

    [super setString:newString];  
}

[self setString:newString]この場所では、無限の再帰ループになります。[super setString:newString]スーパーラスのセッターを呼び出す必要があります。しかし、私は自分でそれをしたことはありません。

于 2012-09-13T10:55:41.007 に答える