クラスの作成の基本形

Last-modified: 2012-08-13 (月) 16:55:29

クラスの作成の基本形

  • SubClass.h
    #import <Foundation/Foundation.h>
@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