Objective-C でリフレクション

Objective-C をちょこちょこ使ったりしています。
ということで、勉強メモ。

#import <Cocoa/Cocoa.h>
#import <stdio.h>

@interface Hoge : NSObject {
    NSString *str;
}

@property (retain) NSString *str;

@end

@implementation Hoge

@synthesize str;

- (id)init {
    if (self = [super init]) {
        str = @"init";
    }
    return self;
}

@end

int main(void) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    Class clazz = NSClassFromString(@"Hoge");
    id hoge = [[clazz alloc] init];
    printf("%s\n", [[hoge str] UTF8String]);
    [hoge setStr:@"hogehoge"];
    printf("%s\n", [[hoge str] UTF8String]);

    [pool release];
    return 0;
}

実行してみる。

lightning% gcc test.m -framework Cocoa && ./a.out
init
hogehoge