2011-12-07 16 views
1

私はdeallocメソッドで保持されているプロパティをどのようにして長期間放つことができますか?あなたが見ることができるように、私のサンプルコードでdeallocメソッドの2つのバージョンがある保持されているプロパティを解放する方法

@interface MyClass: NSObject 
{ 
    //... 
    NSString *myStr; 
    //... 
} 

@property (retain, nonatomic) NSString *myStr; 
//... 

@end 

@implementation MyClass 

@synthesize myStr; 
//... 

//version 1 of dealloc 
-(void)dealloc 
{ 
    [myStr release]; 
    //... 
} 

//version 2 of dealloc 
-(void)dealloc 
{ 
    self.myStr = nil; 
} 

//... 
@end 

:明瞭にするため、ここではいくつかのサンプルコードです。私が懸念している限り、第1のものは第2のものより機械コードが少なく、従ってより速い。しかし、以前は、保持されたプロパティを2番目の方法で処理することは良い習慣であると聞きました。つまり、selfキーワードを使用してsetterを呼び出すことによって、それをnilに設定しています。誰もが、これらが本当であるかどうかを教えてもらえますか?そうであれば、「良い習慣」に固執すべきですか、あるいは「良い習慣」に関係なく私のコードをより速くすることはできますか?

ありがとうございます。

答えて

2

オプションがある場合、the first choice is betterは副作用が少ない可能性があるためです。しかし、スピードの問題は、実際のアプリケーションではほとんど間違いありません。プロパティアクセサーの速度はreleasedeallocになるだけで、プログラムには顕著な影響はありません。 (他に何もなければ、オブジェクトを最初に配分するコストはdwarfs any performance gainです。deallocのいくつかのメッセージセービングを削り取ってもらうことを望むかもしれません。したがって、これが実際の懸念事項であった場合は、割り当てを減らす方が良いでしょう。 )

+0

ありがとうございました。私は "self.myStr = nil;"ということを学びました。 "[myStr release]; myStr = nil;"(ここでは2つのステートメント)になります。だから私は「[myStr release];」(単一のステートメント)が速くなると考えました。ところで、「副作用」によって、ここでは正確に何を意味していますか? – xuxu

+0

@xuxu:KVO通知、元に戻すスタックの変更 - そのようなこと。 – Chuck

関連する問題