2013年2月27日水曜日

@synthesizeを省略する

windowが、というか、xcode(ver 4.5.2)でempty applicationを新規作成すると、作成されるスケルトンの中で、そう例えば application:didFinishLaunchingWithOptions:の中で、


    [self.window makeKeyAndVisible];


みたいにプロパティが使われている。
これを直接インスタンス変数に変えてみようとすると、あれ? _windowがない。というか、windowの@syznthesizeがない。かといって


    [window makeKeyAndVisible];

だとエラーになる。まさか、

    [_window makeKeyAndVisible];

だと通るの?

通るんですよお客さん。

がしかし、全部のプロパティが@synthesizeが無いわけでもない。試しに1個消してみると、undefinedになる。えーまさかのwindowだけ? なわけないよないくらなんでも。論理が通らない。

何だろう?と暫し悩み、ググるも、色よい答えが見つからず、xodeの4.4辺りから@synthesizeが省略できる、という話は見かけるものの、そこまで。
でよーくコードを見ると、window以外のプロパティには readonly が付いている。

「これ?」

はい、それです。readonlyを取ると、他のプロパティも@synthesizeなしでOK。もちろんインスタンス変数名は「_プロパティ名」となる。

readonlyを付けると、自分の見間違えで、設定するところだけエラーになるのかと思ったが、間違いなく参照個所すべてが"undecleared"になる。

変なの。

0 件のコメント:

コメントを投稿