0

次の問題があります。戻るボタンを押してView Controllerをポップすると、deallocメソッドが呼び出されません。

私が使用しているコードは次のとおりです。

NSLog(@"coleccionVista retain count0: %i",[coleccionVista retainCount]);

coleccionVista = [[coleccionViewController alloc] init];
NSString *nombreColeccion = [colecciones objectAtIndex:i];
coleccionVista.nombreColeccion = nombreColeccion;
coleccionVista.title = [NSString stringWithFormat:coleccionVista.nombreColeccion];
NSLog(@"coleccionVista retain count1: %i",[coleccionVista retainCount]);

[self.navigationController pushViewController:coleccionVista animated:NO];
NSLog(@"coleccionVista retain count2: %i",[coleccionVista retainCount]);

[coleccionVista release];
//[coleccionVista release];
NSLog(@"coleccionVista retain count3: %i",[coleccionVista retainCount]);

そして、コンソールに次のメッセージが表示されます。

初めてビューをプッシュします:

2010-08-17 10:30:36.019 TAU 4[50133:207] coleccionVista retain count0: 0
2010-08-17 10:30:36.021 TAU 4[50133:207] coleccionVista retain count1: 1
2010-08-17 10:30:36.022 TAU 4[50133:207] coleccionVista retain count2: 3
2010-08-17 10:30:36.022 TAU 4[50133:207] coleccionVista retain count3: 2
2010-08-17 10:30:36.088 TAU 4[50133:207] coleccionViewController->viewWillAppear
2010-08-17 10:30:38.515 TAU 4[50133:207] coleccionViewController->viewWillDisappear

2回目:

2010-08-17 10:30:44.171 TAU 4[50133:207] coleccionVista retain count0: 1
2010-08-17 10:30:44.173 TAU 4[50133:207] coleccionVista retain count1: 1
2010-08-17 10:30:44.174 TAU 4[50133:207] coleccionVista retain count2: 3
2010-08-17 10:30:44.176 TAU 4[50133:207] coleccionVista retain count3: 2
2010-08-17 10:30:44.241 TAU 4[50133:207] coleccionViewController->viewWillAppear
2010-08-17 10:30:52.332 TAU 4[50133:207] coleccionViewController->viewWillDisappear

また、表示されていない dealloc メソッドに関する NSLog メッセージもあります。しかし、別の [coleccionVista リリース] を別のリリースの後に強制すると、dealloc メッセージが表示されますが、[super dealloc] を試行するとクラッシュすることに気付きました。私は、coleccionViewController の他の参照を保持していません (私はコードを検索しており、メソッドのすべての使用法は、私が示しているコードにあります)。

何か案が?前もって感謝します!

4

2 に答える 2

0

2 つの大きな問題:

NSLog(@"coleccionVista retain count0: %i",[coleccionVista retainCount]);
coleccionVista = [[coleccionViewController alloc] init];

おそらくcoleccionVista非 nil かもしれませんが、新しいものを割り当てる前に解放していません。これは、リークまたはクラッシュのいずれかです。また、-retainCount は int ではなく NSUInteger を返すことに注意してください。%i でフォーマットすると、未定義の動作が発生します (通常、これはビッグ エンディアンの 64 ビット システムで間違った数値を出力するだけです)。

[coleccionVista release];
NSLog(@"coleccionVista retain count3: %i",[coleccionVista retainCount]);

あなたは何かを解放しています。あなたはもはやそれを所有していません。他の誰かが所有していることを知らない限り、それを使用するのは安全ではありません。プロパティにした場合は、おそらくどちらかまたはどちらか[coleccionVista release]; coleccionVista = nil;が必要です。self.coleccionVista = nil

于 2010-08-19T17:32:09.660 に答える
0

最後に、何が起こったのか理解したと思います。かなりコードを変更したのでよくわかりませんが、coleccionVistaクラスのメソッドを使っていたのはNSTimerだったようで、クラスの参照を維持していたので、割り当てを解除します。

于 2010-08-19T16:50:30.767 に答える