@property (readonly) にしておいたら、書き換えは出来ないと思っていたら、

そのクラスのメソッドであれば書き換える方法があったのでメモ

(iOS 5で試しています。)

Objective-C Cなので、arrow accessor を使ったメンバーのアクセスが出来ます。

 hoge->member

これを使った場合、public, protected, private のアクセス制限内であれば、

@property の readonly を設定した変数の書き換えが可能です。

ReadTestというクラスを作って試してみます。

[ReadTest.h]

@interface ReadTest : NSObject

@property (readonly, nonatomic, strong) NSString *value;

– (NSArray*)createReadTests;

@end

[ReadTest.m]

@implementation ReadTest

@synthesize value;

– (NSArray*)createReadTests

{

    NSMutableArray *array = [[NSMutableArray alloc] init];

    for (int i=0; i<10; i++) {

        ReadTest *rt = [[[self class] alloc] init];

        

        // エラーになる。

        // rt.value = @”aa”;

        

        // コレはいける

        rt->value = @”aa”;

        

        [array addObject:rt];

    }

    

    return array;

}

@end