Objective-C (2) オブジェクト指向

クラスの定義と実装

  • NSObject:すべてのクラスはデフォルトでNSObjectを継承
  • interface:Objective-Cではinterfaceでクラスを宣言する
  • インスタンス変数:外部からアクセスできない
  • プロパティ変数:外部からアクセスできる

宣言 ヘッダファイル(.h)

#import "ライブラリファイル"

@interface クラス名 : 親クラス名 <プロトコル>
{
  //インスタンス変数宣言;
}
//プロパティ変数宣言;
//メソッド宣言;
@end

実装 (実装ファイル .m)

#import "ヘッダファイル"

@interface クラス名 () <プロトコル>
{
  //インスタンス変数;
}
//プロパティ変数宣言;
@end

@implementation クラス名
//メソッドの実装
@end

インスタンス変数の宣言

//データ 変数名;

//例:
NSInteger num;

プロパティ変数の宣言

//@property (属性) データ型 プロパティ名;
//例:
@property (assign) NSInteger * num;

メソッドの宣言

  • アクセス権:privateのようなアクセス権がなく、すべてpublicです
  • 返り値無し、void:返り値無し場合はJavaと同じのvoid
  • +:クラスメソッド (Javaで言うと静的メソッド)
  • -:インスタンスメソッド
//引数無し
+ (返り値型) メソッド名;
- (返り値型) メソッド名;
//例:
- (void) sayHello;

//一つの引数
+ (返り値型) メソッド名:(型1)引数名1;
- (返り値型) メソッド名:(型1)引数名1;
//例:
- (void) sayHello:(NSString *)name;

//複数の引数
+ (返り値型) メソッド名:(型1)引数名1 ラベル2:(型2)引数名2 ...;
- (返り値型) メソッド名:(型1)引数名1 ラベル2:(型2)引数名2 ...;
//例:
- (void) sayHello:(NSString *)name time:(NSDate *)now;

メソッドの実装

  • return:返り値を返す
  • オーバーライド(overwrite):親クラスにある同名メソッドを実装し直すこと
  • super:親クラス。Javaにもsuperです。
  • seft:自クラスのメソッドとプロパティを使う。Javaで言うとthisです。
    • プロパティ:self.property1
    • メソッド:[self method1]
//一行名の宣言部はクラス宣言時と同じ
- (void) sayHello:(NSString *)name
{
    //親クラスの処理を呼び出す
    [super sayHello:name]
    
    //処理
    NSLog(@"%@, %@!\n", self.helloString, name);
}

クラスの使用

メソッドの呼び出し

//引数無しメソッド定義
//- (返り値型) メソッド名;
- (void) sayHello;
//呼び出し
//[オブジェクト名 メソッド名];
[obj sayHello]

//一つの引数のメソッド定義
//- (返り値型) メソッド名:(型1)引数名1;
- (void) sayHello:(NSString *)name;
//呼び出し
//[オブジェクト名 メソッド名:引数1];
[obj sayHello:@"Yazawa"];

//複数の引数のメソッド定義
//- (返り値型) メソッド名:(型1)引数名1 ラベル2:(型2)引数名2 ...;
- (void) sayHello:(NSString *)name time:(NSDate *)now;
//呼び出し
//[オブジェクト名 メソッド名:引数1];
[obj sayHello:@"Yazawa", [NSDate date]];
//ここの引数nowは呼び出しのネクスト

プロパティの使用

//オブジェクト名.プロパティ
obj.helloString = @"こんにちは";

インスタンスの作成・初期化

作成:NSObjectのallocメソッドでインスタンスを作成

NSDate * time = [NSDate alloc];

初期化:メソッドで実際の値を生成

time = [time init];

作成と初期化が一緒に行う

NSDate * time1 = [[NSDate alloc] init]

コンビニエンスコンストラクタ(Convenience Constructor)

allocの作成手順を省略されて、直接インスタンスを生成し初期化するメソッド。
JavaのAPIクラスのgetInstance()メソッドみたいな感じかな。

NSDate * now = [NSDate date];
NSDate * otherDate = [NSDate dateWithTimeIntervalSinceNow:5.0];

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>