2015年

6月

11日

Objective-C Class(クラス)

Class(クラス)間での値の受け渡し

ViewController.m

#import "ViewController.h"

#import "Automobile.h"

#import "CarK2000.h"

#import "CarDeLorean.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    // 親クラス側の処理 UIViewControllerクラス

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning

{

    // 親クラス側の処理 UIViewControllerクラス

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


// [標準イニシャライザ]ボタンを押した時

- (IBAction)proc01:(id)sender{

    

    // ViewController → Automobile データ転送

    // オブジェクト生成(インスタンス化、実体化)

    Automobile *am = [[Automobile alloc] init]; // 標準的なイニシャライザ

//  Automobile *am = [Automobile new];

    

    // 車名:Automobile.h @property (weak, nonatomic) NSString *carName;

    am.carName = @"プリウス";

    // 排気量:@property (assign, nonatomic) int carHaikiryou;

    am.carHaikiryou = 1600;

    

    // インスタントメソッド

    [am runCar];

    [am stopCar];

    

    // +クラスメソッド 曲がる そのまま呼び出すことができる

    // 引数を持てない

    [Automobile turnCar];

    

    // オブジェクト解放

//  [am release];

    

}


// [指定イニシャライザ]ボタンを押した時

- (IBAction)proc02:(id)sender{


    // オブジェクト生成(インスタンス化、実体化)

    Automobile *am = [[Automobile alloc] initWithCarName:@"ミラージュ"];

    

    [am runCar];

    

}



// [複数インスタンス]ボタンを押した時

- (IBAction)proc03:(id)sender{

    

    // オブジェクト生成(インスタンス化、実体化)

    Automobile *am01 = [[Automobile alloc] init]; // 標準的なイニシャライザ

    // 車名:@property (weak, nonatomic) NSString *carName;

    am01.carName = @"ブルーバード";

    

    // オブジェクト生成(インスタンス化、実体化)

    Automobile *am02 = [[Automobile alloc] init]; // 標準的なイニシャライザ

    // 車名:@property (weak, nonatomic) NSString *carName;

    am02.carName = @"ファミリア";

    

    [am01 runCar];

    [am02 runCar];

}


// [継承クラス]ボタンを押した時

- (IBAction)proc04:(id)sender {

    

    // CarK2000 オブジェクト生成(インスタンス化、実体化)

    CarK2000 *am = [[CarK2000 alloc] initWithCarName:@"ナイト2000"];

    [am runCar];

    [am jumpCar];

    

}


- (IBAction)proc05:(id)sender{

    

    // CarK2000 オブジェクト生成(インスタンス化、実体化)

    CarDeLorean *am = [[CarDeLorean alloc] initWithCarName:@"ナイト2200"];

    [am runCar];

    //[am jumpCar];

    [am doTimeSliip];

    

}


@end

Automobile.h

#import <Foundation/Foundation.h>


@interface Automobile : NSObject


// -----------------------------------

// プロパティの設定

// -----------------------------------

// 属性(車名)

@property (weak, nonatomic) NSString *carName;


// 属性(排気量)int = assign 主にスカラー変数(intBOOLなど)のプロパティ属性として利用されます。

@property (assign, nonatomic) int carHaikiryou;


// -----------------------------------

// メソッドの設定(プロトタイプ宣言)

// -----------------------------------

// メソッドを外部から参照可能

- (void)runCar;


- (void)stopCar;


- (id)initWithCarName:(NSString *)name;


+ (void)turnCar;


@end

Automobile.m

#import "Automobile.h"


@implementation Automobile


// NSObject(スーパークラス)オーバーライドされた状態 機能の拡張することが出来る

// 標準イニシャライザ(コンストラクタにあたるもの)

//- (id)init

//{

//    // superスーパークラス

//    // 親クラスの初期化を行う

//    self = [super init];

//    

//    // 子供クラスの初期化

//    if (self) {

//        

//    }

//    return self;

//}


// 指定イニシャライザ

- (id)initWithCarName:(NSString *)name

{

    self = [super init];

    if (self) {

        

        self.carName = name;

        

    }

    return self;

}


// ファイナライザ

// ARC機能がONのため必要はない

//- (void)dealloc

//{

//    

//}


//---------------------------------

// インスタンスメソッド

//---------------------------------


// 「走る」メソッド

- (void)runCar {

    

    // ViewController → Automobile データ受入

    //NSLog(@"%s",__func__);

    NSLog(@"%@ 走る",self.carName);

    

}


// 「止まる」メソッド

- (void)stopCar {

    

    //NSLog(@"%s",__func__);

    NSLog(@"%@ 止まる",self.carName);


}


//---------------------------------

// クラスメソッド

//---------------------------------


// 「曲がる」メソッド

+ (void)turnCar {

    

    //NSLog(@"%s",__func__);

    NSLog(@"曲がる");

    

}


@end

CarK2000.h

#import "Automobile.h"


@interface CarK2000 : Automobile


// -----------------------------------

// メソッドの設定(プロトタイプ宣言)

// -----------------------------------

// メソッドを外部から参照可能


- (void)jumpCar;


- (void)runCar;


@end

CarK2000.m

#import "CarK2000.h"


@implementation CarK2000


//---------------------------------

// インスタンスメソッド

//---------------------------------


// 「ジャンプする」メソッド

- (void)jumpCar {

    

    NSLog(@"%@ ジャンプする",self.carName);

}


- (void)runCar {


    [super runCar];

    NSLog(@"%@ めちゃ速く走る",self.carName);


}


@end

CarDeLorean.h

#import "Automobile.h"


@interface CarDeLorean : Automobile


// -----------------------------------

// メソッドの設定(プロトタイプ宣言)

// -----------------------------------

// メソッドを外部から参照可能

- (void)doTimeSliip;


@end

CarDeLorean.m

#import "CarDeLorean.h"


@implementation CarDeLorean


//---------------------------------

// インスタンスメソッド

//---------------------------------


// 「ジャンプする」メソッド

- (void)doTimeSliip {

    

    NSLog(@"%@ タイムスリップする",self.carName);

}


@end

GitHub Class


▫️参考ページ

 

  

目 次