Project Unknown's Blog

Peojct.Unknownと言う名前で細々とアプリ開発をやってるメンバーのブログです。

Objective-で別クラスのメソッドを使う

どうも、どうまずです。
今回は他のクラスのメソッドを呼び出すところを記載していきます。

クラスの作成

呼び出されるテストクラスを作成します。

File->New->Fileと選択し、
iOSの[Cocoa Touch class]を選択します。
クラス名は適当に、私は[RTTestClass]と付けました。
Subclassは[NSObject]を選択します。

最後にファイルの保存先を指定して、まずクラスの作成は完了です。
これで、[RTTestClass.h]と[RTTestClass.m]の二つのファイルが作成されます。

メソッドの作成

メソッドは[RTTestClass.m]に記載します。

今回は簡単にログを出すだけのメソッドにします。

#import "RTTestClass.h"

@implementation RTTestClass

-(void)outPutLogTestClass {
    NSLog(@"RTTestClassのログを出すよ!");
}

@end

Objective-Cはヘッダーファイルが他のクラスから閲覧することが可能です。
なので、このメソッドを下記のように[RTTestClass.h]に記載します。

#import <Foundation/Foundation.h>

@interface RTTestClass : NSObject

-(void)outPutLogTestClass;

@end

他のクラスから呼び出す。

準備は整ったので、他のクラスからoutPutLogTestClassメソッドを呼び出してみます。

まず、[RTTestClass.h]をimportします。(①)
次にクラスのインスタンスを作成します。(②)
最後にメソッドの実行します。(③)

 
#import "ViewController.h"
//①他のクラスをインポート
#import "RTTestClass.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //他のクラスからメソッドを呼び出す
    //②インスタンスを生成、allocはメモリの確保、initは初期化の意味
    RTTestClass *rtTestClass = [[RTTestClass alloc] init];
    //③RTTestClassのメソッドを利用する。
    [rtTestClass outPutLogTestClass];

}

メソッドの呼び出しは今までselfと書いていましたが、
これは自分自身のクラスのインスタンスをあわらしているもので、
他のクラスのメソッドを利用する場合は、

 
[クラスのインスタンス メソッド名];

となります。

補足

ちなみに私は、間違って下記のように記載してしまったことがあります。

 
#import "ViewController.h"
//①他のクラスをインポート
#import "RTTestClass.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //他のクラスからメソッドを呼び出す
    //②インスタンスを生成 メモリの確保とか初期化忘れた!
    RTTestClass *rtTestClass;
    //③RTTestClassのメソッドを利用する。
    [rtTestClass outPutLogTestClass];

}

②のところで、メモリの確保や初期化を忘れてしまったのですが、
エラーで怒られ・・・ず!そのままシミュレータも問題なく起動してしまって、このミスになかなか気がつきませんでした。

動作はもちろん正常ではなく、メソッド呼び出したのに処理されない。
しかも、エラーにならない・・・。怒ってよ・・・。