Какие атрибуты @property следует использовать, если ссылка на значение не сохранена? - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть свойство:

@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 не кажется подходящим.Мне нравится, когда эта функциональность инкапсулируется как свойство, но, возможно, свойство не подходит.

Что вы думаете?

1 Ответ

2 голосов
/ 19 ноября 2010

Если вы пишете свои собственные сеттеры, не имеет значения, что вы используете.Он служит только намеком на то, как он работает для вас / других разработчиков.

Тип свойства действительно влияет только на методы, созданные @synthesize.Поэтому, если вы предоставляете свои собственные методы, вы сами диктуете стратегию сохранения, а стратегия свойств из декларации в основном игнорируется.

В этом случае я бы использовал copy.Потому что, хотя вы не используете прямое копирование, вы сохраняете значения, полученные из переданного объекта, и сохраняете их ненавязчивым способом для этого объекта.Таким образом, вы копируете информацию, просто в другой формат.Но что касается компилятора, это вообще не имеет значения.Это просто для галочки, когда ты пишешь свой собственный сеттер.

...