Objective-C入門その10:HelloWorldAppDelegate解決編(後編)

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > Objective-C入門その10:HelloWorldAppDelegate解決編(後編)

2009/09/17 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

きますよー。

8回もかけて最初の1ファイルの読解に手こずるこのシリーズも、ようやく解決編です。
まさかの2本立て。メインディッシュはクラスの実装部分を食べ尽くしてやります。

クラスの宣言部分をまだ読んでいない方はこちらへ。
Objective-C入門その9:HelloWorldAppDelegate解決編(前編)

それでは!
一気に片付けましょう。

HelloWorldAppDelegate.m
Hello,World! 起動終了時動作クラス、メイン(クラスの実装)

#import “HelloWorldAppDelegate.h”
このクラス自体のヘッダーの読み込みです。これで2つがつながります。

#import “MyViewController.h”
前回書いた @class MyViewController; の読み込みです。
ヘッダー読み込んでおけばOKってワケじゃないのが面倒ですね。

@implementation HelloWorldAppDelegate
で、クラスの実装です。

@synthesize window;
アクセサメソッドの自動生成用コンパイラディレクティブです。
@propertyで宣言したwindowプロパティへ、アクセサメソッド生成の指示を出します。

@synthesize myViewController;
同じくアクセサメソッドの自動生成用コンパイラディレクティブです。
@propertyで宣言したmyViewControllerプロパティへ、アクセサメソッド生成の指示を出します。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
メソッドの実装です。
applicationDidFinishLaunchingというメソッドはUIApplicationDelegateの中で宣言されていますので、ヘッダーの方には何も書いていませんでした。
実装はちゃんとやらないといけないのでココに書きます。

戻り値が無いインスタンスメソッド「applicationDidFinishLaunching」は、UIApplication型のapplicationという引数を受け取る。と書いてあります。

MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@”HelloWorld” bundle:[NSBundle mainBundle]];
長いですねー。

MyViewControllerのインスタンス用のメモリを確保して、HelloWorldって名前のXibファイル(ファイルへのバンドルを生成した後)で初期化。それをMyViewController型のaViewControllerってインスタンス変数に格納します。

まとめてしまえば、Hello, World!の画面(テキストフィールドやラベル込み)を1個作れってことです。

self.myViewController = aViewController;
selfは自分自身のインスタンス。
インスタンスのmyViewControllerに先ほどのaViewControllerを格納して、

[aViewController release];
aViewControllerを解放する、と。

インスタンスを生成して初期化して別のインスタンスに割り当てて生成用のインスタンスを解放して。
ああー。めんどくさー!

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
長い割にこっちはシンプル。
ステータスバーを黒タイプにして。って言ってるだけ。書き方が難しすぎる。。。

UIView *controllersView = [myViewController view];
で、controllersViewって名前のビューを1個作り、

[window addSubview:controllersView];
ウィンドウのサブビューに割り当て、

[window makeKeyAndVisible];
ウィンドウをレンダリング(描画)する。

}
結局、長々と書いてあるもののやっていることは、
HelloWorld.xibビューを生成してウィンドウ上に描くことと、
ステータスバーの色を変えてるだけ。

では、もう1個のメソッド。

- (void)dealloc {
allocがインスタンスに何かを覚えさせるためのメモリ領域を確保することを指していますので、
deallocはその反対。メモリを解放します。

[myViewController release];
myViewController(ビュー)を解放して。

[window release];
windowを解放して。

[super dealloc];
superは親クラス(この場合NSObject)を指しますので、
親クラスを解放します。

}
関連しているものを片っ端から消去していくイメージですね。
releaseとdeallocはどちらも「解放」と書いていますが、用途も含め別物です。
それはもう少しあとに説明します。

@end

大したことやって無いのに、ホントにめんどくさー!

これでサンプルだって言うんだから先が思いやられますね。
ですが、逆に言えばこれはお作法ですので、
目をつぶって書いてしまっても問題ない内容が含まれています。

ゼロからこれを書くというより、
コピペで良い部分はコピペする。というのが正しい使い方です。

さてさて!
いかがでしたか!?HelloWorldAppDelegate。

帰りたくなってませんよね!?

次回から3回連続で、

MyViewController.h
MyViewController.m
main.m

と、Hello,World! のその他のプログラムを読解していきます。
最初の難関を突破したんですから、いきなり読んでも大丈夫なハズ!

死にかけから復活したベジータのように。
圧倒的な読解力を見せつけてやりましょう。

関連する記事:


Advertisement