web-dev-qa-db-ja.com

IOS変数vsプロパティ

Objective-CとIOS developmentに飛び込み、変数/プロパティを宣言する必要があるときと正しい場所を考えていました。私が説明する必要があるコードの主要部分は以下のとおりです。

なぜ、いつ、いつインターフェイスステートメント内で変数を宣言する必要がありますか。また、変数に_と同じ変数があり、プロパティと同じ変数があるのはなぜですか。そして、実装では、@ synthesize tableView = _tableViewを実行します(合成の機能を理解しています)

ありがとう:-)

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
{
    UITableView *_tableView;
    UIActivityIndicatorView *_activityIndicatorView;
    NSArray *_movies;
}

@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicatorView;
@property (nonatomic, retain) NSArray *movies;
4
William

まず、プロパティのインスタンス変数をステートメントとして宣言する必要はありません

@synthesize var = _iVar;

実際に_iVarという名前の暗黙的な変数を生成しています。

次のように、クラスの外部からアクセスできるようにする場合は、プロパティを作成します。

YourClass *obj = [[YourClass alloc] init];
obj.yourProperty = somevalue;

プロパティを使用すると、独自のゲッターとセッターを作成する必要がなくなり、メモリ管理の多くを自分で行うことができます。ここに、あなたが読みたいものと、投稿内にリンクされた他の記事があります。

http://cocoawithlove.com/2008/08/in-defense-of-objective-c-20-properties.html

5
tGilani

いつ、いつインターフェイスステートメント内で変数を宣言する必要があるのか

インスタンス変数は、オプションでインターフェース・ステートメント内で定義されます。あるいは、実装でそれらを定義することもできます(または、合成されたプロパティの場合は、まったくではありません)。

なぜ彼らは_と同じ変数を持っているのですか

アンダースコアは、「プライベート」変数の慣例にすぎません。 規則 は、他の言語でも同様に使用されます。これらは必須ではありません。

そしてプロパティと同じもの。そして、実装では、@ synthesize tableView = _tableViewを実行します(合成の機能を理解しています)

プロパティは、このクラスの変数への外部オブジェクトアクセスを提供する手段です。クラス内で変数を使用するつもりで、その変数を外部のクラスに公開する必要がない場合は、そのプロパティを定義する必要はありません。

変数名とプロパティ名が同じ場合は、@ synthesize variableNameと書くだけです。ただし、それらが異なる場合(例:_が規則によって名前に追加される場合)、ステートメント@ synthesize variableName = _variableNameは、プロパティvariableName変数_variableNameを設定および取得します。

2
Ozair Kafray