0

iOSプロジェクトを継承したばかりで、ivarとプロパティの割り当て方法について質問があります。

このプロジェクトでは、ivarはプロパティと同じように名前が付けられていますが、アンダースコアで始まります。次に、プロパティが合成されているとき、それはこのように行われます

@synthesize property = _ivar;

これは少し奇妙だと思います。私は以前に1つのiOSプロジェクトに取り組んだことがありますが、私が行っていたとき、ivarとpropertyの両方が同じ名前でした。次に、プロパティを単純に合成すると、すべてがハンキーなドーリーでした。

なぜこの男は違うことをしたのですか?私は何が欠けていますか?

4

4 に答える 4

1

どこかで_var、開発者が参照する必要があるときに誤って変数を参照することに対する保護としてフォームを使用することが一般的になりましself.propertyた。最新のツールを使用すると、@synthesize線を完全に削除して@synthesize x = _x;自動的にシミュレートできるようになりました。

于 2012-12-05T12:29:41.303 に答える
0

あなたは何も見逃していません、それはスタイルの選択です。この方法を使用する場合_ivar、ivarまたはプロパティを簡単に間違えることはありません。また、Mike Wellerが述べているように、これはAppleが推奨するものです。

ivarと同じ名前の送信を渡すデリゲートを使用している場合にも役立ちます。例えば:

プロパティを宣言しtableView、ivarに対して同じことを行うと、コンパイラは次のtableViewようなメソッドで変数を再宣言することについて文句を言います。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   // Dot some thing with the table object
}

クラススコープとメソッドスコープの両方に変数名tableViewがあり、どちらを使用するかを実際に判断できないためです。

Xcodeの最新バージョンでは、ヘッダーファイルが次のようになっている場合、ivarを宣言する必要はありません。

@interface MyTableViewController : UIViewController <UITableViewDelegate> 
    @property (nonatomic, weak) IBOutlet UITableView *tableView;
@end

そうすれば、もうプロパティにアクセスする必要はありません@synthesize。これは自動的に行われ、名前の付いたivar _tableViewも作成されます。self.tableViewただし、構文を使用してプロパティを介して変数にアクセスすることをお勧めします。

これには例外があります。スーパーコールにすでに存在するプロパティをどこに再導入する場合は、を呼び出す必要があります@synthesize。再び「_ivar」が作成されます。

もう1つの例外は、プリミティブ型を使用している場合、コンパイラーがを作成しないこと_ivarです。ヘッダーに作成する必要はなく @synthesize myInt = _myInt、ivarが作成されます。

于 2012-12-05T12:27:00.927 に答える
0

この方法では、プロパティを使用してiVarを呼び出して設定する必要があります。iVarを使用する場合は、_iVarで呼び出します。そうしないと、誤ってプロパティを使用せずにiVarを直接呼び出す可能性がありません。それはエラーを示し、あなたはああ私が自分自身を置く必要があることを思い出させるでしょう。

于 2012-12-05T12:33:08.043 に答える
0

XCodeの最新バージョンでは、合成する必要はありません。合成する必要があります。しかし、ここでもアンダースコアが付いています。

ただし、それを宣言することでオーバーライドできます。@synthesize property=property;または@synthesize property;、他の名前を付けることができることに気付くでしょう。@synthesize property=myproperty;

ただし、最初は、変数名とアクション名(numberArray、nameTextField、cancelButtonなど)を使用するなど、スタイルの問題でしたが、現在はほとんど使用されておらず、番号、名前、キャンセルにそれぞれ名前を付けるように求められます。

ただし、_propertyを使用するには、アップルのガイドラインに従うことをお勧めします。

于 2012-12-05T13:26:49.233 に答える