Objective-Cの基礎知識

かたチャ

Objective-Cの基礎知識

      2017/02/26

『詳細! Objective-C iPhoneアプリ開発 入門ノート』の学習ノートです。

今回は『PART2 Objective-Cの基礎知識』です。

C言語のおさらい

Objective-Cはその名前からもわかる通り、C言語をベースにした言語です。

本章ではC言語の言語仕様についておさらいすることができました。

意外にわかっていなかったポイントをあげてみます。

複合代入演算子

a =  a  + 1;

a += 1;

と書くことができます。

これを「複合代入演算子」といいます。

そんな名前があったとは知らなかったです。

ポストインクリメントとポストデクリメント

++aとa++の違いをご存知でしょうか?

ともにaをインクリメント(1足す)する処理ですが、実行するタイミングが違います。

前者は読み込まれたときに実行されますが、後者は次のステートメントに進む直前に実行されます。

例えば

b = ++a;

ならばaに1を足してかたbにaを代入します。

b = a++;

の場合はbにaを代入してからaに1を足します。

後者をポストインクリメントといいます。–の場合はポストインクリメントといいます。

floatとdouble

float型とdouble型はともに浮動小数点数型です。

コンピュータは小数点以下の数をそのまま扱うことができません。

そこで、指数と仮数を使って、仮数のマイナス乗という形で表します。

floatとdoubleの違いは情報量にあります。floatは32bitでdoubleは64bitです。

charの正しい読み方

気になってcharの正しい読み方を調べてみたが「キャラ」でも「チャー」でもいいようです。

マクロの名の由来(予想)

マクロ定数やマクロ関数というものがあります。

いわゆる#defineでヘッダなどで定義するあれです。

マクロは「大きい」という言葉の意味があります。

この「大きい」視点からプログラムを眺めて定義している感じがマクロ定義の言葉の由来なのではないだろうかと想像します。

Objective-CとC言語との相違点

trueとfalse

trueとfalseがObjective-CではYESとNOに当たります。

trueとfalseも一応使えます。

多重継承について

Objective-Cでは多重継承はできません。

この仕様は短所ではなく長所であると考えます。多重継承による混乱を避けているからです。

メソッドの書式

メソッドの定義と呼び出しの書式がかなり独特です。

[]で囲んでオブジェクトにメッセージを送ります。

例えばNSDateクラスのインスタンス生成と初期化を行う場合は以下のようになります。

NSDate *theDate = [NSDate alloc];//インスタンスを作る
theDate = [theDate init]; //初期化する

その他

ミュータブル(mutable)とイミュータブル(immutable)

ミュータブル(mutable)とイミュータブル(immutable)という概念について知りました。

オブジェクト指向プログラミングにおいて、イミュータブル(immutable)なオブジェクトとは、作成後にその状態を変えることのできないオブジェクトのことである。対義語はミュータブル(mutable)なオブジェクトで、作成後も状態を変えることができる。イミュータブル – Wikipedia

mutableはmutant(ミュータント[突然変異体])の形容詞。

Objective-Cでは例えばNSMutableStringクラスを使って文字列の追加削除を行った場合、当該オブジェクト自体が変更されます。

クラス名の最初につく「NS」とは何か?

NSStringやNSArray、NSWindow等 MacOSXのAPI群(?)であるCocoaフレームワークの接頭子には”NS”が付きます。 そう、NextStepです。美しきObjective-C

「NS」とはCocoaフレームワークにおけるAPI群につく接頭辞で「NextStep」の略です。

わからなかったこと

NSDateクラスのdescriptionWithLocaleメソッド

サンプルプログラムに掲載されていたNSDateクラスのdescriptionWithLocaleメソッドが存在しなかった。私の環境だけ?

まとめ(終わってみて感想)

本章はC言語の復習的な内容で、iPhoneアプリを作っていくことはありませんでした。

そのため地味な作業が多く正直つまらなかったです。

しかし、こういう地味な作業なしには本当の実力はつかないと思うので是非面倒くさがらずに勉強してもらいたいと思います。

 - Objective-C