2010-11-19 6 views
0

私は、プロパティを持っている:値への参照が格納されていない場合、どの@property属性を使用する必要がありますか?

@property(readwrite, ?????) NSDate *selectedDate; 

そうのようなアクセサは次のとおりです。

NSCalendar _calendar; 
NSDateComponents _selectedDateComponents; 

@dynamic selectedDate; 
- (void)setSelectedDate:(NSDate *)newDate 
{ 
    @synchronized(_selectedDateComponents) 
    { 
     if (!newDate) return; 

     [_selectedDateComponents release]; 
     int requiredComponents = NSDayDateComponent | NSMonthDateComponent | NSYearDateComponents; 
     _selectedDateComponents = [[_calendar components: requiredComponents fromDate:newDate] retain]; 
    } 
} 

- (NSDate *)selectedDate 
{ 
    @synchronized(_selectedDateComponents) 
    { 
     if (!_selectedDateComponents) return nil; 

     return [_calendar dateFromComponents:_selectedDateComponents]; 
    } 
} 

クラスは、セッターに送信されたオブジェクトへの参照を保持しません。 retain,copyまたはassignのいずれも適切ではないようです。私はこの機能をプロパティとしてカプセル化したいのですが、プロパティが適切でない可能性があります。

あなたの見解は?

答えて

2

自分のセッターを書いている場合は、使用するものは関係ありません。それはあなた自身/他の開発者にとってどのように動作するかのヒントとしてのみ役立ちます。

プロパティタイプは、実際に@synthesizeによって作成されるメソッドにのみ影響します。したがって、独自のメソッドを提供する場合は、自分自身で保持戦略を指示し、宣言のプロパティ戦略の方がほとんど無視されます。

この場合、私はコピーを使用します。直接コピーを使用していない間は、渡されたオブジェクトからの値を格納し、そのオブジェクトに目立たない方法で格納します。したがって、情報を別の形式にコピーしています。しかし、コンパイラが気にする限り、それはまったく問題ではありません。これは純粋にあなた自身のセッターを書くときのショーのためのものです。

関連する問題