1. まとめトップ
0 お気に入り 8783 view
お気に入り追加

この記事は私がまとめました

twcritiqueさん

Objective-Cでは、ヘッダファイル(クラスやクラス内容を宣言してあるもの)の拡張子が.h、実装ファイル(クラスメソッドの処理内容を記述してあるもの)の拡張子が.mとなります。
main.m
ふつうのC言語と同じく、まず最初にmain関数が実行されますが、その内容はSupporting Filesフォルダのmain.mに記述されています。内容はこのようになっていました。

まずは、「.m」拡張子のファイルを編集してプログラムを作るのが、Objective-Cプログラミングの第一歩と言えるでしょう。この.m拡張子は、Objective-Cのソースコードファイルを示すものです。C言語のソースコードは.c拡張子でしたね。.c拡張子では、Objective-C独自の機能などは使えませんので、必ず.m拡張子のファイルを用意します。

#import <Foundation/Foundation.h>
これは、Foundationフレームワークのヘッダーファイルをインポートするためのものです。Objective-Cでは、基本的な機能はすべて「Foundation」というフレームワークとして用意されています。

MainStoryboard.storyboard
ビューを取りまとめてアプリ全体の遷移を管理しています。
初期状態ではビューコントローラがひとつだけ置いてあって、中身はViewControllerクラスに定義する感じでしょう。

Objective-Cでは、メソッドの呼び出しは「メッセージ」と呼ばれるものを送信して行います。メッセージの送信先を「レシーバ」、そのセレクタに贈るメッセージの内容を「セレクタ」といいます。

例えば、[obj setMessage:@"This is First Object!!"];というのは、objというレシーバにたいして、setMessageというセレクタに@"This is First Object!!"という値をつけてメッセージを送っている、ということになります。

左 然り、これは使用するクラスの機能を読み込むために記述しておくもの。C言語の「#include」と目的は同じなれど、Objective-Cの「#import」は二重読み込みされないため、関数が二重定義されエラー発生という心配は無用になる。念のため、「RootViewController.h」の内容も見ておこうか。

出典iwire.jp

左 サブクラス「RootViewController」の定義を「RootViewController.h」で行い、それを読み込むという流れよ。クラスが保持するメソッドなどの宣言は拡張子「.h」のヘッダーファイル、実装は拡張子「.m」のソースファイルで行うことがObjective-Cの流儀と覚えられたし。

XCodeで プロジェクトを作成すると、<プロジェクト(アプリ)名>-prefix.pch というファイルができています。このファイルはソースコードコンパイル時に自動的にインクルードされる ヘッダーファイルです。全てのソースコードに関係する 設定情報やインクルードファイルを指定することで 其々のソースコードにいちいち #import を指定しなくても済むようになります。

Objective-C++とは、そういう言語があるわけではなく単にObjective-Cの中でC++が使えるというだけ。

それでは、実際にどうやったら使えるようになるのか。
.mファイルの拡張子を .mm にする。
これで、Xcodeは Objective-C++ で記述していることを認識してくれ、コンパイラが適正に動いてくれる。

これを直すには、ViewController.mファイルの拡張子を mm に変更し、
ViewController.mm にしてあげる必要があるようです(C++を使用しているため)。
拡張子を変更したら、処理を実装します。

Mac OS XやiOSの開発は、Xcodeでソースコードを記述し、Interface BuilderでGUIのデザインをする、というように、2つのアプリを組み合わせて行います。

プロジェクトを作成すると、Xcode 3.2の場合、プロジェクトウィンドウの左側のリストに「Interface Builderファイル」というフォルダが表示されます。この中に、「◯◯ViewController.xib」「MainWindow.xib」という2つのファイルが作成されているはずです。これらがInterface Builderのファイルです。Xcode 4では、プロジェクト名のフォルダの中に、クラスのソースコードファイルとまとめて保管されています。

Interface Builderというのは、「nibファイル」と呼ばれるGUIデザインのファイルを作成するための専用ツールです。プロジェクトにあった「◯◯.xib」というファイルが、nibファイルです(今はxibという拡張子ですが、以前はnibという拡張子になっていた関係から、今でもnibファイルと呼ばれます)。

プロパティリスト(英: property list)は、Mac OS X Cocoa・NeXTSTEP・GNUstep などで利用されるオブジェクトシリアライゼーションのためのファイルである。また、 .plistという拡張子をもつので、plistファイルと呼ばれることが多い。

実用では、ユーザーの設定を保存するのによく使われる。これはWindowsにおけるレジストリと似た使い方である。また、プロパティリストはバンドルの情報を格納するためにも用いられ、以前のMac OSではリソースフォークが近い用途に用いられていた。

プロパティリストは NSPropertyListSerializationクラスによってパースされる。プロパティリストが含むことができるのは、Foundation または Core Foundation のオブジェクトのみである。プロパティリスト全体は配列(NSArray)または連想配列(NSDictionary)でなければならない。

なぜClassesディレクトリを使うのか

現在のXcode5系のテンプレートプロジェクトのまま作ってしまうとClassesディレクトリがなく、plistやpcxファイルと同じディレクトリに全てのコードが配置されるとプロジェクトの見通しが悪く感じてしまいます。また、Xcode3系のときはClassesディレクトリが自動で作成されていた事があり、そのClassesという名前をそのまま使っています。

1