Objective-Cのクラスやプロパティ、特徴的なメソッドの使い方:iOS SDKで始めるObjective-C入門(7)(1/3 ページ)
開発ツールXcode/iOS SDKを使ってiPhone/iPadアプリを作る方法を、プログラミング言語「Objective-C」の書き方/文法を交えて解説。「Windowsを使っていたけど、iOSアプリを作るためにMacを使い始めた」という初心者を対象にしています。今回は、クラス、プロパティ、メソッドを中心にインポート、アクセサー(ゲッター、セッター)、引数とラベ、スコープ、selfとsuperなどについてもコードを交えて説明します。
前回の記事「iOSアプリ開発初心者のためのオブジェクト指向の基本」では、Objective-Cにおけるオブジェクト指向プログラミングの基本を解説しました。
今回はもう少し掘り下げて、Objective-Cにおける「クラス」についてと、Objective-Cでオブジェクト指向プログラミングをする上で非常に重要な「プロパティ」「メソッド」について詳しく解説します。
サンプルプロジェクトの作成
今回は新しくプロジェクトを作り直します。
Xcodeのメニューより[File]→[New]→[Project...]を選択してプロジェクトを作成します。プロジェクト名は「SampleApp」とします。
プロジェクトを作成したら、Personクラスを作成します。
作成されたPerson.hとPerson.mの中身を空にしておきましょう。
クラスファイルの構成
Objective-Cのクラスファイルは、ヘッダーファイルと実装ファイルの2つで構成されています。
- ヘッダーファイル(.h)
- 実装ファイル(.m)
これはC++言語と同じ構成です。Objective-Cでクラスを定義する際は、この2つのファイルを作成して行います。
今回作成したPersonクラスでも同じようにPerson.hとPerson.mが作成されていますね。
クラスの宣言
クラスを作成するには、このクラスがどんなクラスなのかを宣言する必要があります。クラスの宣言はヘッダーファイル(.h)に書きます。そして、クラスを宣言するには@interfaceと@endを使用して以下のように書きます。
@interface クラス名 : 親クラス名 @end
前回までの記事でもたくさん目にしましたね。
@interfaceと@endの末尾は「;(セミコロン)」は不要です。
Objective-Cでは親クラスを省略して書くことはできません。実は、Objective-Cで作成されるクラスは全て「NSObject」と呼ばれるクラスのサブクラスでなければなりません。NSStringクラスやNSArrayクラス、そしてUIViewControllerクラスも元をたどるとNSObjectのサブクラスです。
このように、全てのクラスの頂点に位置する最も基本的なクラスを「ルートクラス」といいます。
JavaやC#でも「Object」クラスがあります。これらの言語では、親クラスの指定を省略して記述可能ですが、この場合自動的にObjectクラスが親クラスに指定されます。
「Objective-Cでは親クラスを省略して記述できない」ということだけでも覚えておきましょう。
また、基本的にクラス名はクラスファイル名と同じものを指定します。今回は Personクラスを定義するので、ヘッダーファイルPerson.hに以下のように記述します。
@interface Person : NSObject @end
インポート
実はコンパイラーは、このままだとNSObjectが何者なのか理解できません。NSObjectが何者なのか教えるためには「#import」を使用します。
これも前回までの記事で何度も目にしましたね。
NSObjectクラスは「Foundation.framework」と呼ばれる、Objective-Cの基本的な機能を定義したフレームワークで定義されています。NSStringやNSArrayもこのフレームワークで定義されています。
従って、NSObjectを使えるようにするためには、以下のようにしてFoundation.frameworkをインポートする必要があります。
#import <Foundation/Foundation.h> @interface Person : NSObject @end
コラム「#importと#include」
C言語を触ったことがある方にとっては、「#includeを使うんじゃないの?」と思われるかもしれません。
Objective-Cでは#includeではなく、#importを使用します。両方ともファイルを読み込むという点では同じですが、この2つの大きな違いは、#importは同じヘッダーファイルを多重に読み込まないようになっている点です。
#includeを使用する場合は、実装者自身で多重に読み込まれないよう考慮しなければならないため非常に面倒なので、#importを使用しましょう。
クラスの実装
クラスやクラスに定義されるメソッドの実装は実装ファイル(.m)に記述します。クラスを実装するには@implementationと@endを使用して以下のように書きます。
@implementation クラス名 @end
@implementationと@endの間にクラスを実装していきます。従って、Personクラスでは以下のように記述します。
@implementation Person @end
また、実装ファイルには対応するヘッダーファイルを#importで読み込む必要があります。以下のようにして、Person.hをインポートするようにしましょう。
#import "Person.h" @implementation Person @end
Copyright © ITmedia, Inc. All Rights Reserved.