-3

次の方法の中で、どれが最良の方法か教えてください。

@implementation Person
@synthesize name;
- (void)dealloc { [self.name release]; [super dealloc]; }
@end



 @implementation Person
    @synthesize name;
    - (void)dealloc { [name release]; [super dealloc]; }
    @end



@implementation Person
@synthesize name;
- (void)dealloc { [name release]; name = nil;[super dealloc]; }
@end
4

3 に答える 3

2

最初のものは間違いなく間違っています:

(Appleのドキュメントより)

初期化メソッドと dealloc でアクセサー メソッドを使用しないでください。アクセサー メソッドを使用してインスタンス変数を設定してはならない唯一の場所は、イニシャライザー メソッドと dealloc です。


2 つ目は、Apple がサンプル アプリで使用しているものです。


nil私の意見では、ポインターをに設定することにより、(解放された)ポインターへの呼び出しがメッセージを転送するだけになる ため、最後のものは(おそらく)最適です(解放nilされたオブジェクトへの呼び出しは安全です)。 )。プロパティが にretain設定されている場合、nilも呼び出されることに注意してreleaseください。

于 2012-07-11T10:05:48.040 に答える
0

ARC 以外のバージョンでは、3 番目のバージョンが最適です。これは、リリースされた変数をnil.

ただし、Apple が推奨するように、プロジェクトのビルドには ARC を使用してください。

APPLEの資料より

自動参照カウント (ARC) では、システムは MRR と同じ参照カウント システムを使用しますが、コンパイル時に適切なメモリ管理メソッド呼び出しを挿入します。新しいプロジェクトには ARC を使用することを強くお勧めします。ARC を使用する場合、通常、このドキュメントで説明されている基本的な実装を理解する必要はありませんが、状況によっては役立つ場合があります。

于 2012-07-11T10:11:08.407 に答える
0

これは私にとって最高です

@implementation Person
@synthesize name;

-(void)dealloc { 
   self.name = nil; 
   [super dealloc]; 
}
@end

そして、あなたの最初のものは間違っています。

于 2012-07-11T10:02:13.040 に答える