0

コード1

@interface Rectangle : NSObject   
{
    int width,height;
}
@property int width,height;

コード2

@interface Rectangle : NSObject
@property int width,height;
{
    int width,height;
}

それらの違いは何ですか?そして、@property私はすでにintforwidthと を入れていheightます。中括弧で再度宣言する必要があるのはなぜですか?</p>

更新: 私は osx 10.8 64 ビットを使用しています。

4

4 に答える 4

2

再宣言する必要はありません。次を使用してください。

@interface Rectangle : NSObject
@property int width,height;
@end
于 2012-07-31T18:21:39.343 に答える
0

あなたの例では、「code1」は正しいですが、おそらく不要ですが、「code2」は正しくなく、コンパイルされません。インスタンス変数は @interface 行の直後に中括弧で宣言する必要があるため、2 番目の例は間違っています。

width他の人が言及しているように、宣言する必要はまったくないかもしれませんheight。最新のランタイムを使用している場合、コンパイラは@propertyステートメントから、プロパティの基になるインスタンス変数を持つことを意図していることを判断でき、これらを作成します。一方、古いレガシー ランタイムでは、インスタンス変数が好きwidthで、height明示的に宣言する必要があります。プラットフォームを指定しなかったため、あなたの場合に必要かどうかは明確ではありません。

最新のランタイムは常に iOS で使用されます。そのため、ここで多くの人が、インスタンス変数を宣言する必要はないと誤って言うのは、そのためです。Mac OS X では、最新のランタイムは 10.5 以降の 64 ビット コードで使用されます。32 ビット コードまたは古いバージョンを使用している場合は、インスタンス変数を明示的に宣言する必要があります。

于 2012-07-31T18:30:07.903 に答える
0

中括弧内の名前は、一致するプロパティのバッキング ストレージとして使用される場合と使用されない場合があるインスタンス変数です。それはあなたの@synthesize声明をどのように書くかによって異なります。

明示的なインスタンス変数をまったく持たないようにしたいと思います。この種の状況でそれらを使用した唯一の理由は、デバッグを容易にするためです。

于 2012-07-31T18:20:28.063 に答える
0

それらの違いは、前者が正しく、後者が間違っていることです。2 番目のコードがコンパイルされたとしても、それはコードの書き方ではありません。すべてのプロパティ宣言は常に ivar の後に置きます (中かっこ内のもの。また、@property は変数を宣言しません (中かっこ内で行われます)。@property ディレクティブは、getter の生成方法についてコンパイラに指示を与えます)。 @synthesize ディレクティブを使用する場合は、実装ファイルでこれを行う必要があります。

于 2012-07-31T18:23:43.713 に答える