2012-05-02 11 views
1

一般に、同じ変数を指すように異なる名前のプロパティを使用したいと思います。同じ変数を指す、異なる名前の2つのプロパティを宣言する

私のクラスをMKAnnotationに適合させ、titleプロパティにnameという名前の他のプロパティと同じ値を設定したいと思っています。私の元のプロパティの名前を変更しないでください(名)。

2つのオブジェクトを持たずに1つを別のオブジェクトに複製することなく、スマートな方法がありますか?

+0

同じ変数を指す2つのプロパティがあります。 '@synthesize a = var; @合成b = var; ' –

答えて

-2
yourObject.firstProperty = [[AClass alloc] init]; // ---> alloc or set to an existing object... 

yourObject.secondProperty = yourObject.firstProperty; 

この方法の両方の性質はあなただけの特性のために、独自のアクセサを書く必要は合成する代わりに、同じ割り当てられたオブジェクト

1

を指します。あなたは次のようにすることができます。

@implentation Student 

- (NSString *)firstName 
{ 
    return _name; 
} 

- (NSString *)lastName 
{ 
    return _name; 
} 

@end 

注:これは、突然変異が発生した場合、観察者が唯一の方法について通知されるように、キー値が観測で問題が発生しますあなたの実装で

@interface Student 
{ 
    NSString *_name; 
} 

@property (readonly, nonatomic) NSString *firstName; 
@property (readonly, nonatomic) NSString *lastName; 

@end 

:あなたのインターフェイスで

実際の価値の突然変異ではなく、呼ばれています。

1

HotLicksとTheSaadの回答の問題は、Key-Value Observing(KVO)の準拠と関係しています。何かがあなたのnameプロパティを観察している場合は、他の何かがsetTitle:セッターを呼び出した場合に通知する必要があります。およびその逆。

@synthesize-私はいつものようにあなたのプロパティの1つをお勧めします。たとえば、私はnameがそのように行われると仮定します。その最後の方法の理解のために

- (void) setTitle:(NSString*)newTitle 
{ 
    self.name = newTitle; 
} 

- (NSString*) title 
{ 
    return self.name; 
} 

+ (NSSet *)keyPathsForValuesAffectingTitle 
{ 
    return [NSSet setWithObject:@"name"]; 
} 

を、+[NSKeyValueObserving keyPathsForValuesAffectingValueForKey:]ためのドキュメントをお読みください。次に、あなたが、この場合は他の、titleを行い、そのプロパティに通過プラスの依存関係についてKVOを伝える必要があります。

あなただけ@synthesize両方が同じIVAR(例えば_name)をポイントし、それがときsetTitlenameのオブザーバーに知らせないのでtitleは、nameに依存することKVOを知らせるためだけ+keyPathsForValuesAffectingTitle方法を提供することができません。が呼び出されました。あなたはまた、+keyPathsForValuesAffectingNameを提供して、KVOに他の方向への依存性を伝えることによってそれを解決しようとするかもしれません。私はそれが動作すると思われても、私はそれが実験にあったとしてもそれに依存しないと思います。無限再帰または循環依存を無視するフレームワーク(無限再帰を避けるため)のいずれかになりがちです。

関連する問題