4

現在、次のようなクラスを作成できます。

@interface Foo
@property(assign) float bar;
@end

@implementation Foo

- (void) someMethod
{
    _bar = 4;
}

@end

ボイラープレートリストを省略できると便利です@synthesize。アンダースコア表記に慣れれば、名前が付けられたものはすべて_fooインスタンス変数であるという読みやすいルールが得られます。このように自動生成されたインスタンス変数を使用しても大丈夫ですか?つまり、クラスの作者にも見えないはずなのだろうか?

4

2 に答える 2

3

はい、これらの変数を使用しても問題ありません。

@synthesize要件を完全に削除することは便利でした:@synthesize xyzが暗黙的に挿入されるようになりました - それが唯一の違いです。コンパイラの設計者は、アクセサを合成する状況とカスタム実装を提供する状況を明確に識別できるため、明示的な@synthesize.

于 2012-11-21T11:37:02.763 に答える
2

自動合成されたプロパティ用に作成されたインスタンス変数を使用してもよろしいですか?

絶対

@synthesize ボイラープレート リストを省略することができるのは便利です。アンダースコア表記に慣れることができれば、_foo という名前のすべてがインスタンス変数であるという読みやすい規則が得られます。

もちろん、 を使用して名前を指定することもできます@synthesize foo = f00;

このように自動生成されたインスタンス変数を使用してもよろしいですか? つまり、クラスの作成者にも見えないはずですか?

いいえ。それらは内部的にアクセス可能である必要がありますARC を使用している場合はそれほど頻繁ではありませんが、ARC に直接アクセスする一般的なケースは、初期化と破棄 (アクセサー メソッドを使用すべきでないケース) です。

于 2012-11-21T11:46:36.343 に答える