いくつかのボタンのテンプレートとして Nib を使用しています。それぞれが独自の独立した状態を持っています。しかし、ボタンを離そうとすると、dealloc でクラッシュしました。これがコードです...
mSoundBtns = new cSoundButton*[mNumSounds];
for(unsigned int i = 0 ; i < mNumSounds; ++i) {
mSoundBtns[i] = nil;
}
for(unsigned int s = 0; s < mNumSounds; ++s) {
[[NSBundle mainBundle] loadNibNamed:@"InstanceSoundButton" owner:self options:nil];
//Auto Loads via Outlet into 'soundNib'
mSoundBtns[s] = soundNib;
soundNib = nil;
uint32 count = mSoundBtns[s].retainCount;
NSLog(@"Last Count: %d", count);
}
for(unsigned int j = 0; j < mNumSounds; ++j) {
[mSoundBtns[j] release]; //**** Crash here on 7th (of 8) release
mSoundBtns[j] = nil;
}
ヘッダ:
@interface cLocationContext {
...
cSoundButton** mSoundBtns;
IBOutlet cSoundButton* soundNib;
}
@property (nonatomic, assign) IBOutlet cSoundButton* soundNib;
@end
Nib は非常にシンプルで、カスタム ビュー タイプの親ビューと子ビューが含まれているだけです。
cSoundButton は、単に名前とブール値の状態 Mute または Not を追跡します。これがデロックです
- (void)dealloc {
delete[] mSoundTag;
// Call the inherited implementation
[super dealloc]; //****Crashes in here
}
クラッシュは、UIButton -> UIButtonContent dealloc の super dealloc への呼び出し内にあります。メモリ管理で2回の割り当て解除など、何か悪いことをしていると思いますが、どこを見つけることができません。
ペン先を複数回装填することは合法ですか?