0

役に立たない投稿タイトルで申し訳ありませんが、自分が何をしているのかよくわからないので、それが私が思いついた最高のものでした。

私のヘッダーファイルでは、次のようになります

@interface RootViewController : UITableViewController {
NSMutableArray *eventsArray;    
}

@property (nonatomic, retain) NSMutableArray *eventsArray;

@end

これはすべてのプロパティではありませんが、簡単にするために 1 つを除いてすべて削除しました。

Apple 開発者のガイドに従ってこれを行っています。プロパティを合成するように指示されているため、ガイドが完全に更新されていないように見えますが、もう必要はありませんか?

それにしても、どうしてこうなった。初心者の私には、プロパティを 2 回宣言しているように見えますか? それとも、最初の行で何か他のことをしますか?

4

2 に答える 2

4

古いコンパイラでは、歴史的な理由からこのようになっています。

あなたは最近これを行うことができます:

@interface RootViewController : UITableViewController

@property (nonatomic, retain) NSMutableArray *eventsArray;

@end

あなたがそれを持っている方法で、あなたはインスタンス属性を宣言していて、それからあなたはゲッターとセッターを自動的に生成したいと言っています。

今日では、プロパティがあると言うことができ、コンパイラはコンパイル時にインスタンス属性を自動的に生成します。それは明らかな冗長性を取り除きます。

于 2013-02-28T12:59:00.263 に答える
2

初心者の私には、プロパティを 2 回宣言しているように見えますか? それとも、最初の行で何か他のことをしますか?

プロパティとそれをバックアップするインスタンス変数 (存在する場合) は、2 つの異なるものです。プロパティは実際には、クラスが特定のアクセサー メソッドを提供するという単なる約束です。したがって、プロパティと ivar を別々に宣言しなければならなかったという事実は奇妙ではありません。ただし、実際には、ほとんどのプロパティは関連する名前の ivar によってサポートされており、2 つを別々に作成して維持するのは雑用になりました。そのため、Apple は ivar 合成をコンパイラに追加しました。これにより、コンパイラは、ivar がまだ存在しない合成済みプロパティに対して ivar を生成します。また、合成されたアクセサーが最も一般的であり、プロパティが とマークされていても、コンパイラは指定したアクセサーを使用するため@synthesize、それがデフォルトになり、コンパイラ ディレクティブは不要になりました。

于 2013-02-28T13:11:23.450 に答える