2012-04-04 10 views
1

iOSと通常のOS Xの開発を切り替えたとき、私は二つのことに気づいた:ココアタッチベースの匿名カテゴリでは許可されていますが、「通常の」ココアでは許可されていませんか?

//SomeClass.h 
@interface SomeClass: SomeUIClass 

    @property (retain)SomeProperty* someProperty; 

@end 

//SomeClass.m 
@interface SomeClass() 
{ 
    SomePrivateVar* somePrivateVar; 
} 
@end 

@implementation SomeClass 

@synthesize someProperty; 
@end 

上記は、iOSの下でうまくコンパイルされます。それは次のとおりです。

  1. 私はさらに 匿名のカテゴリ(クラス拡張)の下で.mファイルに他のプライベートアイバーズを宣言することができ、公共@interface
  2. にIVAR明示的 を宣言せずにプロパティを合成することができます。

しかし、OS X用にコンパイルして、UIベースのもの(UIViewの代わりにNSView)とは対照的にNSベースのクラスをサブクラス化すると、上記の両方でコンパイルエラーが発生します。

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

答えて

2

これらは"modern runtime"の機能であり、Mac OS Xの64ビットアプリケーションでしか使用できません。おそらく32ビットバージョンも含まれているユニバーサルバイナリを構築しているでしょう。

+0

ああ....ああ。実際に私は普遍的な32/64を構築していますが、実際には何らかの理由で32でコンパイルする必要があります。オーディオユニットの検証ツール - オーディオユニットプラグインを構築しています) 64ビット環境でビルドされている場合は、ビルドされたコンポーネントも表示されます。 – SaldaVonSchwartz

関連する問題