[Objective-C] Androidと比較しつつ Hello World を書く

AndroidのActivityサブクラスに当たるものがUIViewControllerサブクラス。 このクラスでUIView(サブ)クラスを操作したりしてプログラムを作成していく。

プロジェクトを作成する

新規プロジェクトで View-based Application を選択する。 View-based Application は一般的なiPhoneアプリケーションでよく使うもの。

***Delegateクラスはアプリケーション全体を管理するためのクラスで、

この中でUIViewControllerサブクラスのインスタンスが生成されている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//  FooBarAppDelegate.h

#import <UIKit/UIKit.h>

@class FooBarViewController;

@interface FooBarAppDelegate : NSObject <UIApplicationDelegate> {
// UIViewから派生したウィンドウを扱うクラス
UIWindow *window;
// ビューコントローラのサブクラスを宣言
FooBarViewController *viewController;
}

// @property でアクセサを自動生成している
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet FooBarViewController *viewController;

@end

viewDidLoadでビューにラベルを追加

『AndroidのActivity#onCreateに当たるメソッド』で正しいだろうか?ライフサイクルを理解してないけどもロード時の最初にコールされるメソッドが viewDidLoad

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (void)viewDidLoad {
[super viewDidLoad];

// UILabel部品を生成、AndroidではTextViewに当たる
// alloc は C言語のmalloc的なもの
UILabel *label = [[UILabel alloc]
// コンストラクタ的なモノ
// 名前は何でもいいけど init接頭語を付けることが多いらしい
// CGRectMake(x, y, width, height); 引数はすべてCGFloat型で
// こいつで部品の一座標と大きさを指定してから配置していく
initWithFrame:CGRectMake(10, 20, 120, 30)];

// labelに文字列をセット
// @マークは NSStringクラスの文字列
[label setText:@"hello world"];
// ビューコントローラが持つ大元の
// view に label をセット
// このときラベル部品のリファレンスカウントが増える
[self.view addSubview:label];
// release でリファレンスカウントを減らす
[label release];
}

シュミレータで実行するとこうなる

hello world と表示される

関連があるかもしれない記事