2

Objective-C でのプロパティの使用について混乱しています。このような新しいものを作成するとIBOutlet:

IBOutlet UISlider *uploadSlider;

次に、スライダーのプロパティを定義して、ゲッターとセッターを使用できるようにします。

@property (nonatomic, strong) IBOutlet UISlider *uploadSlider;

そして@synthesize、実装ファイルで、実際にプロパティを使用する適切な方法は何ですか? たとえば、スライダーのトラック イメージを変更したい場合は、

    [uploadSlider setMaximumTrackImage:[UIImage imageNamed:@"An image"] forState:UIControlStateSelected];

または:

[self.uploadSlider setMaximumTrackImage:[UIImage imageNamed:@"An image"] forState:UIControlStateSelected];

プレフィックスを付けたメソッドselfは、プロパティを定義した後にのみ使用できるため、正しい選択だと思います。しかし、私はその理由を理解していません。これらのメソッドにアクセスするにはプロパティが必要ですか?

また、オブジェクトに関する情報を取得または設定するためにドット構文を使用している場合、インスタンス メソッドのいずれかに直接アクセスしていなくても、オブジェクトのプロパティを定義する必要がありますか?

4

2 に答える 2

2

正しい方法は自分自身です。

次のように合成を適切に設定した場合、最初の方法では実行できないはずです。

@synthesize something = _something;

これは、最初の方法で ivar に直接アクセスしているためです。これは、プロパティを使用するときに避けるべきものです。

言及するのを忘れました。

ドット表記は、入力を高速化するための setter および getter メソッドの単なるショートカットです。ただし、Objective C のアーキテクチャのようなメッセージの一貫性が失われるため、慣れることはお勧めしません。

http://weblog.bignerdranch.com/?p=83

ところで、2つのメモ:

ivar を @property に設定してから @synthesize に設定する限り、自分で ivar を設定する必要はありません。xcode が ivar を追加します。

インターフェイス ビルダーを使用している場合は、アシスタント エディターを使用して、要素をそれぞれのヘッダー ファイルのプロパティ領域にドラッグするだけです。これにより、時間を大幅に節約できます。

于 2012-04-27T00:27:59.617 に答える
2

現在のベスト プラクティスは、公開したい場合は .h ファイルに、非公開にしたい場合は .m ファイルのインターフェイス セクションにこれを配置することです (これはおそらく必要なことです)。また、IBoutlet は通常、弱いポインターを使用するため、viewDidUnload メソッドで nil に設定する必要があります。

したがって、パブリックの場合は .h ファイルで

 @property (nonatomic, strong) IBOutlet UISlider *uploadSlider;
 //IBOutlet's are usually weak

またはプライベートの場合は .m ファイル内

 @interface
 @property (nonatomic, strong) IBOutlet UISlider *uploadSlider;
 //IBOutlet's are usually weak
 @end

次に、.m ファイルに @synthesize を次のように配置します。

 @synthesize uploadSlider = _uploadSlider;

これにより、ゲッターとセッター、および _uploadSlider というインスタンス変数が生成されるため、アクセス方法がわかります。

次に、それを呼び出す正しい方法は次のとおりです。

[self.uploadSlider]

これは本当に同じです

[self getUploadSlider]

また、参考までに、Apple のドキュメントを見ると、プロパティであるすべてのものは . 構文およびその他のものは、メッセージを使用して呼び出す必要があります。

于 2012-04-27T00:34:58.193 に答える