Objective-C 基本講座

オブジェクトの初期化をカスタマイズする

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
オブジェクトの初期化をカスタマイズする方法、self、superについて学習します。
講師:
07:10

字幕

このレッスンでは オブジェクトの初期化を カスタマイズする方法を紹介します 構造体のメンバー同様 オブジェクトもそれぞれが 個別に自分のインスタンス変数を持ちます そしてこのオブジェクトが持つ インスタンス変数は オブジェクトの 作成時に整数や自数型なら0 ポインター型なら無理に 初期化される決まりです 基本的には 後から値を変更できるようにしておけば それで実用上は十分なのですが もしどうしてもこれ以外の値に 初期化したい場合は 初期化用メソッドをオーバーライド しなければいけません その時は知っておくべき取り決めが いくつかあるのでここで紹介しておきます まずイニシャライザーとも呼ばれる 初期化メソッドは インスタンス変数メソッドとして用意し 名前をinit から始める必要があります そして戻り値の型は どのクラスのインスタンスにも適合する インスタンスパイプ型とします ここにあげた イベントクラスの派生元である 変数オブジェクトでは 引数を何も持たないイニシャライザー init が提供されています インスタンス変数のアマウントを 内部で0 以外に初期化したいなら このメソッドを オーバーライドすればいいでしょう もし外部から指定した値で 初期化できるようにしたい場合は これとは別の引数付きイニシャライザーが 必要となります 実際にやってみましょう 命名規則に従いinit に続け withを続け 引数によってどのインスタンス変数が 初期化されるのかがわかるような 名前を追加します いずれも一文字目を大文字にします そしてコロンをつけて 仮引数を定義します これがインターフェース側に 記述する内容です インプリメンテーション側では 1 番最初に派生元の イニシャライザーを呼び出す必要があります これにはsuper キーワードを使い そこに init メッセージを送る形にします super は 現在メソッドを実行中のインスタンスを 派生元のインスタンスと 見立てるためのキーワードです このため super にメッセージを送ることは 派生元である NSObject のメソッドを 呼び出すことになります 戻された値を必ず self 変数に代入してください self は インスタンス変数自身を示すための 変数です self にメッセージを送ることで 自分自身のメソッドを呼び出せます ただイニシャライザーが 呼び出されている時点で self に設定されている インスタンスは仮のもので 派生元のイニシャライザーで 別のインスタンスが戻される可能性があります そのためself への代入は 必須です 派生元イニシャライザーの戻り値を self に代入したら NULL でないか確認してください NULL の場合は初期化失敗を意味します その場合は何もせずにそのまま self を戻します NULL でなければ インスタンス変数amount を 仮引数の値で初期化します if 文内の amount は 引数側ではなく インスタンス変数アマウントを示すことになる 点にも注意してください インスタンス用のメソッドでは 変数名を書くだけで 自分のインスタンス変数を利用できるように なっています このため仮引数名に amount を使えません 別の名前にしてから代入します インターフェース側は amount で問題ありません むしろ同じ名前にしておいたほうが わかりやすくていいでしょう 引数のinit を使われた場合にも アマウントに特定の値を設定した場合は init 側もオーバーライドします その場合super による派生元のinit を呼び出すのではなくself を使って 自分自身のinit with amount を呼び出すようにしてください こうすることで イベントインスタンスの初期化は init with amount が 一元管理できます このような イニシャライザーを 指定イニシャライザーと呼んでいて イベントを派生させたクラスでも イニシャライザーを追加するなら 派生先では スーパー側イニシャライザーとして この指定イニシャライザーを 呼ぶようにします 試しにイベントの派生クラスである bookEvent クラスで ブックネームも初期化できるように イニシャライザーを追加しましょう この場合 bookEvent のイニシャライザーとして in it with amount ブックネームを追加します このように オブジェクティブC では 第2 引数以降には ラベルをつけるのが一般的です in it with amount ブックネームでは 派生元の指定イニシャライザーを呼びます これに加え 派生元の指定イニシャライザーである in it with amount も オーバーライドして 自身の指定イニシャライザーを 呼び出すようにします これでbookEvent では in it with amount ブックネームが 指定イニシャライザーとなり オーバーライドしていないinit も 自動的に自分の指定イニシャライザーを 呼び出すようになります 実際に イニシャライザー文を加えたものを 動かしてみましょう Xcode の画面に 切り替えます イベント側の simulate メソッドで amount 値を出力するようにしたので amount 値が イニシャライザーで指定した値に なっているのか確認できます bookEvent のsimulate では ブックネームとamount と両方を 出力するようにしました main ではinit のままですし bookEvent のinit は オーバーラードをしていませんが ちゃんと何かの本になっています イベント側の指定イニシャライザー in it with amount を オーバーライドしているから こうなります 試しに外すと ブックネームはNULL となります このレッスンでは オブジェクトの初期化をカスタマイズする 方法を紹介しました

Objective-C 基本講座

このコースはプログラミング初心者でもObjective-CによるiOSアプリ開発の体系的な理解が得られるように構成されています。プログラムの動作の原理、Objective-C言語の役割、そこで利用されるCocoa touchオブジェクトの役割、基本的なiOSアプリの作成方法などを学習します。ぜひこのコースをアプリ開発に踏み出すさいの第一歩としてください!

6時間39分 (69 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2015年11月18日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。