心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム

      2014/05/11


Objective-Cの解説はメッセージから始まる。このメッセージという概念、もともと通信系システム出身の私にとってはわかりやすい。メッセージをうけとったらインスタンスが生成するという考え方。一般のObject指向言語でもメッセージをインスタンス生成の契機という形で受け取ってはいるけれど、メッセージの実態として意識することはあまりない。これは Objective-C がGUIもの、つまり人が考えて操作するという特性を持つがゆえだと思う。

02-01 オブジェクトとメッセージ

p18
オブジェクトはidという型を持つ。
id obj;

オブジェクトにメッセージに送る事は
[obj msg]の形式で書く。objがオブジェクト名でmsgがメッセージキーワード。

Objective-Cにやたら[]が出てきてキモチワルイのはこのせいだ。[]は配列じゃない。いや配列でも使う。
メッセージ式を配列の添字として書くと、
element = table[[obj msg]];
とキモチワルイ字面になる。なれるしか無い。elementが変数名。table[]が配列、[obj msg]がメッセージ、この場合は配列の添字として使っている。

続けざまにメッセージを送ることを書くと
[[[obj msg1]msg2]msg3];
なんともゆんゆん感がでてキモチワルイ。ここまで重ねると送っている感が出る。

メッセージは引数を持つ事ができる。メッセージ式の後に:で引数をつける。
[doc isSameDirectory:[info objctAtIndex: ++num]];
doc isSameDirectoryメッセージの引数が[info objctAtIndex: ++num]]という引数をもつメッセージの形になっている。

引数が2つ以上あるときは:で区切る。

cell = [albumview cellAtRow:i clumn:j];

p21
インスタンスの生成はオブジェクトにメッセージを送ることでできる。
[[クラス名 alloc] init]
他の方法で生成することもできるが、とりあえずallocしか書いてない。

p22
02-02 クラス定義
Objective-Cでは、クラスは、
・インターフェース部
・実装部
に分けて書く。

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

@end

という構文。
ミソは、メソッドの宣言だけで処理は書かなくてもいいってこと。
えースーパークラスもいちいち書くんだって感じ。

インスタンス変数の宣言はC言語ごとく
 型 変数名;
で書く。Rubyみたいにいきなり変数名かいちゃダメ。

メソッドの宣言は、引数が無い場合は、

– (id)delegete;

と書く。メソッドの宣言っぽく見えない字面的に。

– (返り値の型)メソッド名;

ですね。

引数は、やはり:で区切って渡す。複数渡しも可。

– (id)cellAtRow:(int)row column:(int)col;

rowとcolは仮引数だってことはわかるけど、columnはなんぞや??
=>第2引数のメッセージキーワードだって。で、このメソッド名は cellAtRow:column:になる。

p24
クラスの実装部は、
@implementation クラス名
メソッドの定義
@end

メソッドの定義は、インターフェース部で宣言したメソッドの実処理を書いて行く。

p26
クラス定義(インターフェース部と実装部)の例が書いてある。List2-1,2-1
クラス1個の例なので、このままでは起動することができない。

p27
起動させるにはmain関数が必要。

main関数は独特だ。事あるごと(ユーザーがGUI操作するたびに)呼ばれると思うんだけど、都度メッセージを判定して該当の処理を行う、caseとかwhenとか書いていないけどそういう条件分岐的な処理をしている。

List2-3

p28
02-03 コンパイル
ターミナルからコンパイル、実行する方法が紹介されている。おお!

clang voltest.m -framework Foundation

a.outという実行ファイルができる。
実行するには

./a.out

 - テクニカル

Comment

  1. […] 詳解 Objective-C 2.0 第3版Posted on 2014年5月6日 詳解 Objective-C 2.0 第3版 CHAPTER2 Objective-Cのプログラム Posted on 2014年5月8日 詳解 Objective-C 2.0 第3版 CHAPTER3 継承とクラス Posted on […]

Message

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

  関連記事

初めてのRuby8章 8.4特異メソッドと特異クラス

特異メソッドと特異クラス プログラムなんて、クラスの継承だけで書けてしまうのが良 …

no image
RailsTutorial4.0を高速で復習する。10.3.3章。

10.3.4マイクロポストを削除する、です。 仕様 マイクロポスト個別に削除でき …

Mac miniのメモリを自力で16Gに増設しました

Mac miniとDellの27インチIPS液晶、とても快適です。もっと快適にす …

no image
テンプレとヘルパーの順番

http://yourdomain/actionxを呼んだときのactionx用 …

パーフェクトRuby 2章Rubyの基礎 2-5-5 クラスメソッド

p54 2-5-5 クラスメソッド インスタンスメソッドに対して、クラスに対して …

no image
RailsTutorial4.0を高速で復習する。3.3.3章。

3.3.3埋め込みRubyです。viewにrubyコードを埋め込んでtitleを …

no image
RailsTutorial4.0を高速で復習する。11.2.4章。

11.2.4[フォローする] ボタン (標準的な方法)、です。 仕様 それぞれの …

no image
RailsTutorial4.0を高速で復習する。6.5章。

演習1問目。 リスト6.20の、メールアドレスを小文字に変換するコードに対するテ …

no image
MacBookAirにMacAppStoreからソフトをダウンロード

MacBookAir 10日目。快調です。 WindowsからMacの移行でつま …

Chromeでの文字化けを対処しました。

WordPressで自作テンプレを作ってみたのはよいものの、困った問題が2つ。 …