プロパティ(アクセサ)のパラメータの設定方法を知りたいです。
次のコードは、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) プロパティは に設定されてretain
いますが、セッターを使用できないため、retain
ここでは意味がありません。
2) また、initWithName
メソッドでは で値を設定しcopy
ます。copy
アクセサー メソッドを使用してプロパティを直接定義してみませんか?
@property (nonatomic, copy) NSString *name;
// ...
self.name = aName;
3)readonly
ここが必要ですか? なぜここで使われているのかわかりません。copy
セッターと一緒に使用すると、セッターreadonly
がないため、値の設定が禁止されます。
4)initWithName
メソッドではcopy
、時々retain
使用されます。copy
値は後で変更されるべきではないため、ここでは常に使用することをお勧めします。
5) 私が覚えているのは、メソッド内でcopy
/retain
内でinitWithName
OKであるということです。release
dealloc
では、この例ではretain
、copy
をどのように使用することをお勧めしますか?readonly