1

次のコード フラグメントの違いは何ですか?

1位

@interface HistoryJsonBean : NSObject
{
}

@property (nonatomic,retain) NSString * unit;

2号

@interface HistoryJsonBean : NSObject
{
    NSString * unit;
}

@property (nonatomic,retain) NSString * unit;

私は初心者ですが、上記の 2 つのコードに違いはありますか?

4

2 に答える 2

3

2番目にはと呼ばれるインスタンス変数がありますがunit、最初にはありません。

Xcodeオーガナイザーの[ドキュメント]タブにある「Objective-Cプログラミング言語」をお読みください。

于 2012-04-16T14:32:46.177 に答える
1

最初の構文は、最新の Objective C ランタイム システムの機能に依存して、プロパティ定義から対応する変数を作成します。したがって、2 番目の構文は、古いランタイム システムで使用される Objective C 2.0 構文にすぎません。

SOからのこの投稿もご覧ください

編集:

後者の場合の変数は ivar です。

プロパティの定義は、もともと ivar のアクセサ メソッドを (適切なメモリ管理を使用して) 定義する簡単な方法にすぎませんでした。新しいランタイム システムでは、ivar を宣言する必要性が緩和されており、プロパティ定義だけで処理できます (これは、プロパティに関連付けられた値を格納するためのメモリの割り当ても意味します)。

インターフェイスの観点からは、新しいランタイム システムでは、あなたが言及した 2 つの構文に違いはありません。ランタイム システムがそれらを 2 つの異なる方法で処理する場合、これは、ランタイム システムのソース コードの実装を検査することによってのみ言えます。そのレベルでも差はないと思います。

于 2012-04-16T14:38:07.297 に答える