文法


idについて

オブジェクトは、どのクラスに属するものでもidという特別な型で表現される。

オブジェクトの生成

  • allocは、生成されたオブジェクトを0初期化してくれる。(但しisa変数は除く) id型のオブジェクトを生成する例

    クラスAへallocメッセージを送りインスタンスを生成する。そのインスタンスに対し、イニシャライズメソッドinitを呼び出している。
id obj = [[A alloc] init]

オブジェクトへのメッセージ呼び出し例(メソッド呼び出し)

単純な例

引数は、:で繋げる。
引数名:引数という利用方法が可能

[obj methodA]
[obj methodB:param1]
[obj point:3 y:10];
[[obj methodC] methodD]
[obj methodB:[obj methodC]]

スーパークラスのメソッド呼び出し例.

method1を実装している直近のスーパークラスのmethod1が呼ばれる。

[super method1]

クラス

クラスの定義

インターフェース部

  • インスタンス変数とメソッドを宣言する.
  • インターフェース部は、ヘッダファイル(xxx.h)として作成する.
  • Cocoa環境で定義する全てのクラスは、NSObjectをスーパークラス(ルートクラス) と持たなければならない。
  • サブクラスは、スーパークラスの変数なら任意に参照する事ができる.

定義の例

@interface クラス名 : スーパークラス名
{
    インスタンス変数の宣言;
}
メソッドの宣言;
@end

インスタンス変数の宣言例

int value;
id obj;

メソッドの宣言例

  • メソッドの宣言時に型を指定しないと、id型と見なされる。
  • 現在では、全ての型を明示するのが一般的。
  • 局所的なメソッド(private)は、インターフェース部にではなく、実装部でのみ定義する。
  • 但しサブクラスが、誤って局所的なメソッドを上書いてしまう危険がある。
-(id)init:(int)value;
-(void)dealloc;
-(int)add:(int)value;
-(int)add:(id)obj;
-(int)value;

クラスの実装

実装部は、実装ファイル(xxx.m)として作成する。

実装部の例

@implementation クラス名
メソッドの定義
@end

selfについて

メソッド内で、自オブジェクトを参照するのに利用する。

イニシャライザ

  • イニシャライザでは、通常スーパークラスのinitを呼び出す。
    これをしなければ、スーパークラスの初期化漏れとなる。...これくらい勝手にやってくれよ
  • 指定イニシャライザと副次的イニシャライザの二つがある。

例 A.h

@interface A : NSObject {
 int a;
@end
-(id)init:(int)val;

A.m

@implementation A {
  -(id)init:(int)val {
    self = [super init]
    if( self != nil ) {
       a = val;
    }
    return self;
  }
}
@end

BOOL型について

  • Objective Cでは、BOOL型を利用する。
  • trueはYES(0でない値)、falseはNO(0)と定義されている。

ヘッダファイルのインクルード方法

#importを利用する

#import <stdio.h>

コンパイル方法

  • 通常、動的ライブラリのFoundationフレームワークを利用する。

コンパイル例

 cc source.m -framework Foundation

C関数の利用方法

  • objective-cの機能を利用せず、Cの関数のみの実装ファイルは.cで良い。
  • 関数の中でobjective-c固有の機能(クラス等の利用)を行う場合は、.mにする。