Hello, World! by Objective-C + Foundation Framework
Objective-C + Foundation Framework な Hello, World! を作る.
GC 使わない場合
#import <Foundation/NSString.h> #import <Foundation/NSAutoreleasePool.h> #import <stdio.h> int main(int argc, char **argv) { NSAutorelesePool* pool = [[NSAutoreleasePool alloc] init]; NSString* str = [[NSString alloc] initWithString:@"こんにちは,世界!\n"]; const char* cstr = [str UTF8String]; printf("%s", cstr); [pool release]; return 0; }
NSAutoreleasePool は Foundation を使う上でメモリ管理用に必要なもの.
これがないと,NSString の中で autorelease か release か何かが呼ばれるらしいので実行時におこられちゃう.
NSAutorelesePool* pool = [[NSAutoreleasePool alloc] init];
NSString を直接標準出力するものはないみたいなので,いったん C 言語の文字列に変換する必要がある.
ここでは,UTF-8 なマルチ バイト文字列に変換してる.
const char* cstr = [str UTF8String];
NSString は wchar_t みたいなワイド文字列に変換する方法はないみたい.
コンパイルと実行はこんな感じ.
% gcc -framework Foundation test.m % a.out こんにちは,世界!
GC 使う場合
GC を使う場合は NSAutorelesePool はいらないみたい.
#import <Foundation/NSString.h> #import <stdio.h> int main() { NSString* str = [[NSString alloc] initWithString:@"こんにちは,世界!\n"]; const char* cstr; cstr = [str UTF8String]; printf("%s", cstr); return 0; }
コンパイルに -fobjc-gc
か -fobjc-gc-only
が必要になる.
% gcc -fobjc-gc -framework Foundation test.m % a.out こんにちは,世界!
とりあえずこれで Objective-C で Hello, World! をかけるようになったぞ!