Objective-C 基本講座

オブジェクトの生涯を理解する

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
作成したオブジェクトを自動的に片付けてくれるARC、その考え方を紹介します。
講師:
07:39

字幕

このレッスンでは作成されたオブジェクトが いつ片付けられるのかを学習してください もしオブジェクトの初期化時にmalloc などを使って記憶区画を確保した場合は そのオブジェクトが片付けられる時に 一緒に片付るようにしてください そのためにはディアロックメソッドを オーバーライドします ディアロックメソッドは オブジェクトがメモリーから片付けられる 直前に呼ばれるメソッドです ちゃんと呼ばれるか実際に実験してみましょう Xcode の画面に切り替えます ここではイベントクラスの init オーバーラードして 初期化時にmalloc で ヒープから記憶区画を確保しています そしてディアロックメソッドをオ-バーライド して初期化時に確保した記憶区画を フリーで解放しています ちなみにオブジェクトが NULL を戻したといった イニシャライザーで取り返しのつかない 失敗をした場合はself にnill を 入れてリターンするようにします nill は無効なオブジェクトを意味します またnill にメッセージを送っても 何も反応しないように ObjectC 側で保証してくれてもいます 呼ばれたことを確認できるようにコンソールに メモリーから消えますと出力させています super にディアロックメソッドを 送る必要はありません super 側はこの後で説明する ARC という機構によって 自動的に呼ばれます そもそも記述しようとするとエラーになります メインでやっていることは 作成とメッセージを送る作業です ランさせるとコンソールに出力されます 確かにディアロックメソッドが呼ばれている ようですが作成したインスタンスを 片付ける記述もないのに なぜインスタンスが片付けられたのでしょうか 解説画面に戻ります これにはARC と呼ばれる 不要なオブジェクトを 自動的に片付ける機構が関係します ARC は オブジェクトの参照数が0 になった時 そのオブジェクトが不要になったと判断し メモリから片付けるようになっています ARC が動作していることはブレースペアで 局所スコープを作れば簡単に検証できます まずブレースペア内で宣言された イベントインスタンス参照用のイベントは ブレースを抜けるまでは利用可能ですが ブレースを抜ければ利用できません この時点でイベントインスタンスを 参照する変数がなくなりイベントインスタンス はどこからも触れなくなります ARC はこの状態を オブジェクトの参照数が0になったと判断して オブジェクトを片付けます 実際に確認してみましょう Xcode の画面に切り替えます 局所スコープの中に イベントの生成とメッセージ送信を入れました ランすると 局所スコープエンドという出力の前に 「メモリから消えます」が出力されたはずです 次にブレースを外してみましょう ランすると今度は局所スコープエンドの後に 「メモリから消えます」が出力されます ARC はこんな風に オブジェクトの参照数を移動カウントし オブジェクトを片付けるべきかどうかを 判断します ではブレースを付け直してブレース外の変数 アウトイベントに イベントを代入してみたらどうでしょう 今度はブレースがあるのにも関わらず 局所スコープエンドの後に 「メモリから消えます」が出力されます 解説画面に戻ります これはブレース外に用意したオブジェクト 参照変数アウトイベントにイベントの値が コピーされたことによりブレース外に出ても 参照している変数の数が 0 にならないからです このオブジェクトの参照数を 覚えるカウンターは オブジェクト自身が持っています ARC はこのカウンターの数を操作しながら オブジェクトの要不要を決定します インスタンス作成時に1にして アウトイベントへの代入時に2 に増やし ブレースを抜けてイベントが 消失する時点で2 に戻す 実際の参照カウントの制御はもう少し 細かいのですがこのような操作をARC が 自動で行います 本当にそうなのか確認してみましょう Xcode の画面に切り替えます アウトイベントへの代入がカウントされている ならもし局所スコープエンドの前に アウトイベントにnill を代入すれば カウントは0 になりイベントインスタンスは 片付けられるはずです ランするとその通りになります 解説画面に戻ります これがARC の名称である自動的に参照を カウントするの由来です ちなみにARC が導入されるまでは このカウントの増減処理は プログラマーが行っていました retainでカウントを1 つ増やし release でカウント1 つ減らします 今でもARC をオフにすれば プログラマーが記述しなければいけません 逆にARC 管理下では retain やrelease といった メッセージは送信できないようになっています ディアロックメソッドでsuper を 呼び出せないのもその1 つです メイン関数にある autoreleasepool キーワード もこの参照カウント関連で用意されたものです かなり上級者向けの話になりますが 興味がある人は メモリーマネージメントをキーワードにして Xcode のヘルプを検索してみてください このレッスンでは作成されたオブジェクトが いつ片付けられるのかを学習しました

Objective-C 基本講座

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

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

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

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

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