クラスの作成の基本形
@interface SubClass : NSObject
{
NSString *subName;
int subNum;
NSData *dateCreated;
}
/** (指定)イニシャライザ **/
- (id)initWithSubName:(NSString *)name
subNum:(int)number ;
/** getter / setter **/
- (NSString *)subName;
- (void)setSubName:(NSString *)name;
- (int)subNum;
- (void)setSubNum:(int)number;
- (NSDate *)dateCreated;
@end
- SubClass.m
#import "SubClass.h"
@implementation SubClass
/* スーパークラスと異なる指定イニシャライズを定義するときは,
* スーパークラスの指定イニシャライザをオーバーライドして,
* このクラスの指定イニシャライザを呼び出すようにする
*/
- (id)init
{
return [self initWithSubName:@"SubName"
subNum:0
serialNumber:@""];
}
/* 指定イニシャライザ */
- (id)initWithSubName:(NSString *)name
subName:(int)number
{
/* スーパークラスのイニシャライザを必ず最初に呼び出す
* 初期化に失敗したときにnilが返ってくる事が保証される
*/
self = [super init];
if (self) {
[self setSubName:name];
[self setSubNumber:number];
dateCreated = [[NSData alloc] init];
}
/* SubClassのインスタンスがnilであれば,メッセージ送信されても問題は起こらない */
return self;
}
- (void)setSubName:(NSString *)name
{
/* ほかのオブジェクトがnameをreleaseしてもいいようretainしておく
* nameがさす値を変更されて困る場合はcopyでnameの新しいインスタンスを生成してもよい
*/
[name retain];
[possesionName release]; /* 前にはいっていたオブジェクトをリリース */
possesionName = name;
}
- (NSString *)subName
{
return subName;
}
- (void)setSubNumber:(int)number
{
subNumber = number;
}
- (int)subNumber
{
return subNumber;
}
- (NSData *)dateCreated
{
return dateCreated;
}
- (NSString *)description
{
NSString *descriptionString =
[[NSString alloc] initWithFormat:@"Name:%@ Number:%@ , recorded on %@",
subName,
subNumber,
dateCreated];
return [descriptionString autorelease]; /* stringWithFormatを使った場合はautorelease不要 */
}
- (void)dealloc
{
/* 自分のインスタンス変数は責任をもってrelease */
[subName release];
[subNumber release];
[dateCreated release];
[super dealloc];
}
@end