久しぶりにObjective-C(久しぶりにWeb+DB Pressを買った)
久しぶりにWeb+DB Pressを買いました。今年の春くらいまでは人が買ったのをちょっと見せてもらったり、とかだったのですが、電車での移動中に読むかなと思って。47号。
// 山本陽平さん記事だけまとめて読みたい。
Objective-C の導入記事があって、一番最初に読みました(詳説Objective-Cは1ヶ月くらい前に買ったのですが、あんまり読めてない)。
これまではTerminal + Emacs でちょっと書いては「あー動いた」みたいな感じだったんですが、今回初めてXCodeを使ってコードを書いてみました。といってもCommand Line Utilityなので、Terminal + Emacsでできる事変わらないんですが。
エラー表示とかがかっこいい(VSも見習うべき*1)。
コード
コードは、Web+DB Pressにあった日付を表示するものです。
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSDate *today = [[[ NSDate alloc ] init ] autorelease ]; NSDateFormatter *formatter = [[ NSDateFormatter alloc ] init ]; [ formatter setDateStyle:NSDateFormatterMediumStyle ]; NSString *formattedDate = [ formatter stringFromDate:today ]; [ formatter release ]; // insert code here... NSLog( @"Today is %@", formattedDate ); [pool drain]; return 0; }
カギ括弧の中で、スペースあけるのはやっぱり好きじゃないな(個人の書き方の問題です。今回はたまたまそうやって書いてみただけ)。
「[formatter release]; -> [ formatter release ];」。
実行結果
inohiro-mac:~ inohiro$ /Users/inohiro/Projects/Obj-C/Date/build/Release/Date ; exit; 2008-11-29 11:23:52.465 Date[689:10b] Today is 2008/11/29
その他
Array にObject(文字列)を追加。
動的型付けだよーみたいな。
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSMutableArray *array = [NSMutableArray array]; [array addObject:@"Apple"]; [array addObject:@"Orange"]; [array addObject:@"Grape"]; for( NSString *value in array ) { NSLog( @"Value = %@", value ); } [pool drain]; return 0; }
実行結果
inohiro-mac:~ inohiro$ /Users/inohiro/Projects/Obj-C/Array/build/Release/Array ; exit; 2008-11-29 12:16:40.256 Array[1235:10b] Value = Apple 2008-11-29 12:16:40.257 Array[1235:10b] Value = Orange 2008-11-29 12:16:40.258 Array[1235:10b] Value = Grape
クラスの実装
「[macintosh SayHello](macintosh オブジェクトのSayHelloメソッドを呼ぶ、というか、macintoshオブジェクトにSayHello(Helloって言え!))」とかわかりやすいと思う。
コード
#import <Foundation/Foundation.h> // Interface @interface Person : NSObject { NSString *name; } - ( void ) SayHello; @property ( nonatomic, copy ) NSString *name; @end // Implementation @implementation Person @synthesize name; - ( void ) SayHello { NSLog( @"Hi, I'am %@", name ); } - ( void ) dealloc { name = nil; [super dealloc]; } @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Person *macintosh = [[[Person alloc] init] autorelease]; macintosh.name = @"Macintosh"; [macintosh SayHello]; [pool drain]; return 0; }
結果
inohiro-mac:~ inohiro$ /Users/inohiro/Projects/Obj-C/Class/build/Release/Class ; exit; 2008-11-29 12:27:31.248 Class[1533:10b] Hi, I'am Macintosh
*1:アドインとかでありそうだけど