私はiPhoneアプリでいくつかのメモリの問題を整理していて、いくつかの基本について考えていました。 ivarをセットアップし、オブジェクトの存続期間中にそれを使用することにならない場合、deallocを呼び出すと、問題が発生しますか?例えば。
@interface testClass {
id myobject;
}
@property (nonatomic, retain) id myobject;
@end
@implementation testClass
@synthesize myobject;
- (id)init {
...
// Do I have to set myobject to nil here?
// So if myobject isn't used the dealloc call to nil
// will be okay? Or can you release the variable without
// having set every object to nil that you may may not use
...
}
...
// Somewhere in the code, myobject may be set to
// an instance of an object via self.myobject = [AnObject grabAnObject]
// but the object may be left alone
...
- (void)dealloc {
[myobject release];
[super dealloc];
}
@end
インスタンス変数 初期化子が実行される前に0に初期化されます 。
はい、 ivarsは常に0/nil/NULL/NO/etcに初期化されます 。
ただし、何が起こっているのかを理解するのに役立つ場合は、それを選択してください。パフォーマンスへの影響はごくわずかです。実行する必要はありませんが、実行しても問題はありません。
nil
メソッドでこれらのivarを常にinit
に設定することをお勧めします。そうすれば、デストラクタでrelease
を呼び出しても問題が発生しないことを確信できます。
Objective-Cがそれらを自動的にnil
に設定し、何らかの理由でそれらの割り当てを削除することで改善できる速度のボトルネックがあることに気付いた場合(ほとんどあり得ない)、心配することができます。それらを削除します。それまでの間、それらすべてをnil
に設定して、より簡単に眠りましょう:)
pdate: BJ HomerとChuckは、ivarswillが自動的にゼロに設定されることを指摘しているため、スタイルの決定。