文法の勉強のため簡単なObjective-CのコードをXcodeで実行してみた
前回、React Nativeのソースコードを読もうとして挫折したので、基礎文法を勉強するためにObjective-C
で何か書いて見ます。
その前にObjective-C
のwiki
を少し読んで感じをつかみます。とりあえず読むために必要そうなこと3つです。
書いて見る
環境: Xcode: Version 8.3.3 (8E3004b)
ではとりあえずhello world
します。別にアプリケーションが書きたいわけではないので、コマンドラインツールプロジェクトとして書きます(もっと言えばコマンドラインツールが書きたいわけではないですが、実行の構成方法が不明だったため一旦これでいかせていただきます)
まずXcode
を起動してFile > New > Project
を選択します。モーダルが表示されるので、macOS
タブのCommand Line Tool
を選択しNext
を押します。名前などは自由に設定します、ただし使用言語はObjective-C
にして、初期設定を終えます。
次にコードを書いていきます。すでにmain.m
(エントリーポイントとなるファイル)が生成済みだったので、そこに処理を記述していきます。クラスの定義の練習をするためにHello
クラスを作成しましたのでそれを呼び出します。(@
はコンパイラディレクティブの他にもリテラルを使用するときの接頭辞として使う、いやおそらくコンパイラディレクティブでリテラルを変換している?)
main.m
#import <Foundation/Foundation.h> #import "Hello.h" int main(int argc, const char* argv[]) { @autoreleasepool { Hello* object = [[Hello alloc] init]; NSString* message = @"Hello world!"; [object setMessage:message]; [object say]; NSLog(@"[object message]: %@", [object message]); } return 0; }
次にHello
クラスをNew > File
からmacOS
タブのCocoa Class
を選択します。こうするとHello.h
、Hello.m
ファイルが生成されます。内容を記述していきます。以下を定義しています、
- 挨拶文を保持する
message
変数 - 挨拶文を取得する
message
関数 - 挨拶文を格納する
setMessage
関数 - 挨拶文をコンソールに出力する
say
関数
です。
- Hello.h
#import <Foundation/Foundation.h> @interface Hello : NSObject { NSString* message; } -(NSString*) message; -(void) setMessage: (NSString*) s; -(void) say; @end
- Hello.m
#import "Hello.h" @implementation Hello -(NSString*) message { return message; } -(void) setMessage: (NSString*) s { message = s; } -(void) say { NSLog(@"say: %@", message); } @end
動かして見る
Xcode
のウィンドウ上部メニュー左辺りにある▶︎
(Runアイコン)を押してコードを実行します。
感想
コンパイラディレクティブをちゃんと覚えていけばある程度読めるようになると思いました。@autoreleasepool
はGCということでいいのかな?いやちゃんと覚えないといけないですね。とりあえず公式ドキュメントをこの辺から探して見ます。
書けるようになる必要があるか?という問いに関しては一瞬、「まあでもSwift
あるし、、、」とか思いましたが、まだまだ使われているため、やっておいて損はなさそうな気がします。