.hで変数を宣言しました:
@property (nonatomic, retain) NSString *var;
以下を使用してプロパティ変数を呼び出す場合:
_var = sumthing;
アプリがクラッシュし、私がそれを次のように呼び出すと:
self.var = sumthing;
それはうまくいきます。
これら2つのシナリオに違いはありますか?
注:@synthesizeこれを具体的に書く必要がないため、私は使用していません。
.hで変数を宣言しました:
@property (nonatomic, retain) NSString *var;
以下を使用してプロパティ変数を呼び出す場合:
_var = sumthing;
アプリがクラッシュし、私がそれを次のように呼び出すと:
self.var = sumthing;
それはうまくいきます。
これら2つのシナリオに違いはありますか?
注:@synthesizeこれを具体的に書く必要がないため、私は使用していません。
を使用している場合は、を使用self.varして保持する必要があります。これにより、setterメソッドが内部的に呼び出されて保持されます。直接割り当てる場合、setterメソッドは呼び出されず、リリースされるとクラッシュします。sumthing@propertysumthing
基本的に、aself.var = sumthing;は、それを割り当てsumthingてvar保持することと同じです(var = [sumthing retain];)。あなたが直接それをしているとき、それは単に割り当て部分を行い、保持はしません。したがって、リリースされると、使用してアプリがクラッシュしsumthingたときにリリースされた変数を指すことになります。var
それでも使用せずに使用したい場合は、どちらで動作self.varするか試してみてください_var = [sumthing retain];。
もう使用する必要がないので、これは合成とは何の関係もありません。スキップできます。
_var ..を使用してvarの@synthesizedプロパティを使用しましたか?そうでない場合は、直接varとして扱います。_varは使用しないでください。