Я хочу понять, как установить параметры свойств (средств доступа).
Я взял следующий код из примера календаря Kal.
// Holiday.h
@interface Holiday : NSObject
{
NSDate *date;
NSString *name;
NSString *country;
}
@property (nonatomic, retain, readonly) NSDate *date;
@property (nonatomic, retain, readonly) NSString *name;
@property (nonatomic, retain, readonly) NSString *country;
- (id)initWithName:(NSString *)name country:(NSString *)country date:(NSDate *)date;
@end
// Holiday.m
#import "Holiday.h"
@implementation Holiday
@synthesize date, name, country;
- (id)initWithName:(NSString *)aName country:(NSString *)aCountry date:(NSDate *)aDate
{
if ((self = [super init])) {
name = [aName copy];
country = [aCountry copy];
date = [aDate retain];
}
return self;
}
- (void)dealloc
{
[date release];
[name release];
[country release];
[super dealloc];
}
@end
1) Свойства установлены на сохранить
, но поскольку сеттер не может быть использован, сохранить
здесь не имеет смысла.
2) Кроме того, в методе initWithName
значения устанавливаются с помощью копия
. Почему бы напрямую не определить свойства с помощью copy
и не использовать методы доступа?
@property (nonatomic, copy) NSString *name;
// ...
self.name = aName;
3) Нужен ли мне здесь только для чтения
? Не знаю, зачем их здесь используют. Если бы я использовал copy
вместе с установщиком, readonly
запрещает мне устанавливать значение, потому что сеттера нет.
4) В методе initWithName
иногда используется копия
, а иногда сохранение
. Я бы посоветовал всегда использовать здесь копию
, потому что значение не должно изменяться позже.
5) Что я помню, так это то, что copy
/ можно сохранить
в initWithName
и выпуск
в методе dealloc
.
Итак, как бы вы предложили использовать сохранить
, копировать
и только для чтения
в этом примере здесь?