3

.hで変数を宣言しました:

@property (nonatomic, retain) NSString *var;

以下を使用してプロパティ変数を呼び出す場合:

 _var = sumthing;

アプリがクラッシュし、私がそれを次のように呼び出すと:

 self.var = sumthing;

それはうまくいきます。

これら2つのシナリオに違いはありますか?

注:@synthesizeこれを具体的に書く必要がないため、私は使用していません。

4

2 に答える 2

2

を使用している場合は、を使用self.varして保持する必要があります。これにより、setterメソッドが内部的に呼び出されて保持されます。直接割り当てる場合、setterメソッドは呼び出されず、リリースされるとクラッシュします。sumthing@propertysumthing

基本的に、aself.var = sumthing;は、それを割り当てsumthingvar保持することと同じです(var = [sumthing retain];)。あなたが直接それをしているとき、それは単に割り当て部分を行い、保持はしません。したがって、リリースされると、使用してアプリがクラッシュしsumthingたときにリリースされた変数を指すことになります。var

それでも使用せずに使用したい場合は、どちらで動作self.varするか試してみてください_var = [sumthing retain];

もう使用する必要がないので、これは合成とは何の関係もありません。スキップできます。

于 2013-02-01T06:05:32.350 に答える
0

_var ..を使用してvarの@synthesizedプロパティを使用しましたか?そうでない場合は、直接varとして扱います。_varは使用しないでください。

于 2013-02-01T06:50:10.950 に答える