2010-11-19 15 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,copyassign都不合適。我喜歡將此功能封裝爲屬性,但可能屬性不合適。

您的觀點是什麼?

回答

2

如果您正在編寫自己的setter,那麼使用什麼並不重要。它只是暗示它如何對你自己/其他開發者起作用。

屬性類型隻影響由@synthesize創建的方法。所以如果你提供你自己的方法,你自己決定保留策略,並且聲明中的屬性策略形式幾乎被忽略。

在這種情況下,我會使用複製。因爲當你沒有使用直接拷貝時,你正在存儲來自傳入對象的值,並以非干擾方式將其存儲到該對象中。所以你正在複製信息,只是以不同的格式。但就編譯器而言,它並不重要。當你編寫自己的setter時,它純粹是爲了展示。

相關問題