инициализатор, свойства, аксессоры и копирование / сохранение / только чтение

Я хочу понять, как установить параметры свойств (средств доступа).

Я взял следующий код из примера календаря 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 .

Итак, как бы вы предложили использовать сохранить , копировать и только для чтения в этом примере здесь?

7
задан testing 28 October 2010 в 15:02
поделиться