2013-03-25 5 views
31

私は初心者向けのiOS開発者ですが、最近@synthesizeがXcodeの特定のバージョンで@synthesizeであり、コンパイラが自動的に合成してプロパティを定義し、_をプライベート変数に割り当てることを簡単に聞いてきました。私は、このテストしてみたObjective-Cは@synthesizeが必須かオプションか?

:アウト@synthesizeで

を、あなたは@synthesize PROPERTY_NAMEで

self.property_name = something; 
_property_name = something; //(used in getter and setters) 

を使用してプロパティとプライベートフィールドにアクセスすることができます、あなたは

を使用してプロパティとプライベートフィールドにアクセスすることができます
self.property_name = something; 
property_name = something; 

私の質問は本当に@合成をもう必要としますか?私は行方不明の大きな話がありますか?

+1

これはオプションです。 –

+1

コンパイラの最新バージョンは、ほとんどの場合除外しておけば、 '@ synthesize'に入れられます。私はちょうどここにプロパティについて書きました:http://stackoverflow.com/questions/15493882/need-assistance-regarding-objective-c-properties-concept/15494036#15494036 – nielsbot

+1

http://stackoverflow.com/questions/11666008/を参照してください。自動的に合成されたプロパティー - xcode-4-4 – rmaddy

答えて

51

Xcode 4.4では、Default Synthesis Of Propertiesという機能が追加されました。

@synthesize name = _name; 
+14

警告:自動生成されたすべてのメソッドをオーバーライドすると、この行は自動的に生成されません(ただし、変数を取得するためにこの行を書き込むことはできます)。また、プロトコルで定義されたプロパティは自動合成されません(代わりに、コンパイラの警告が表示されます)。最後に、 'NSManagedObject'のサブクラスもこの動作を無効にしています。なぜなら、これは主に望ましくないからです。 – borrrden

+3

この回答は*あまりにも簡単に置かれています。詳細については、この記事を読んでください:[Xcode 4.4での自動プロパティ合成](http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) –

+2

もう1つ警告:プロトコルでプロパティを宣言した場合は、合成が必要になります。 –

-3

私が持っているように、あなたがそれを使用してきた場合を除き、その後、あなたはまだ私の知る限り、それを必要とする:

の.hに

だけで、それはこれを自動的に生成し、置きます:.Mで

@property int32_t FwdID; 

@synthesize FwdID; 
クラス内の

用法:

FwdID = 0; 

私はあなたがデフォルトがあなたのために仕事をしたい場合は、あなたが_FwdID = 0を入力する必要があります、伝えることができるものから。コードでは、ちょうど私には醜いように見えます。

あなたが私のような人なら(私が想定しているすべての標準的なコーディング規約を破って)、あなたはまだ合成を使用する必要があります。

+0

getterおよびsetter [[self setFwdID:0]; 'でプロパティにアクセスし、そうでない場合はプロパティではなく実際のインスタンス変数を使用する必要があります。 –

関連する問題