1

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 で問題なくコンパイルされます。あれは:

  1. public @interface で ivar を明示的に宣言せずにプロパティを合成できます
  2. さらに、匿名カテゴリ (クラス拡張) の下の .m ファイルで、他のプライベート ivar を宣言できます。

ただし、OS X 用にコンパイルし、UI ベースのクラスではなく NS ベースのクラス (たとえば、UIView ではなく NSView) をサブクラス化すると、上記の両方でコンパイラ エラーが発生します。

私はObjective-C 2.が一般的に上記を許可すると思ったと思いますが、それらはiOSの「ショートカット」にすぎませんか? または、iOS では許可されているが、OS X では許可されていないという契約はどうなっていますか?

4

1 に答える 1

2

これらは、Mac OS Xの64ビットアプリでのみ使用できる「モダンランタイム」の機能です。おそらく、32ビットバージョンも含むユニバーサルバイナリを構築しているはずです。

于 2012-04-05T00:13:54.580 に答える