我有一个属性:
@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];
}
}
该类不保留对发送给setter的对象的引用。 retain
,copy
或assign
似乎都不合适。我喜欢将此功能封装为属性,但可能属性不合适。
您的看法是什么?
答案 0 :(得分:2)
如果您正在编写自己的二传手,那么您使用的是什么并不重要。它只是暗示它如何对自己/其他开发人员起作用。
属性类型仅影响@synthesize
创建的方法。因此,如果您提供自己的方法,则自己决定保留策略,而声明中的属性策略通常会被忽略。
在这种情况下,我会使用副本。因为,当您没有使用直接复制时,您存储的值来自传入的对象,并以非突兀的方式存储到该对象。因此,您将信息复制出来,只是以不同的格式。但就编译器而言,它根本不重要。当你编写自己的二传手时,它纯粹是为了表演。