iOS と通常の OS X 開発を切り替えたときに、次の 2 つのことに気付きました。
//SomeClass.h
@interface SomeClass: SomeUIClass
@property (retain)SomeProperty* someProperty;
@end
//SomeClass.m
@interface SomeClass ()
{
SomePrivateVar* somePrivateVar;
}
@end
@implementation SomeClass
@synthesize someProperty;
@end
上記は iOS で問題なくコンパイルされます。あれは:
- public @interface で ivar を明示的に宣言せずにプロパティを合成できます
- さらに、匿名カテゴリ (クラス拡張) の下の .m ファイルで、他のプライベート ivar を宣言できます。
ただし、OS X 用にコンパイルし、UI ベースのクラスではなく NS ベースのクラス (たとえば、UIView ではなく NSView) をサブクラス化すると、上記の両方でコンパイラ エラーが発生します。
私はObjective-C 2.が一般的に上記を許可すると思ったと思いますが、それらはiOSの「ショートカット」にすぎませんか? または、iOS では許可されているが、OS X では許可されていないという契約はどうなっていますか?