0

一連のUIButtonサブクラスをインスタンス化し、それらをself.viewと可変配列に追加するViewControllerがあります。これらのサブクラスには、別のビューを指すretainプロパティがあります。ほとんどの場合、viewプロパティは、UIButtonサブクラスのスーパービュー(それらが追加されたビューコントローラーのself.view)を指します。ただし、常にではなく、必ずしもそうとは限りません。そのため、継承されたスーパービュープロパティではなく、このプロパティを使用しています。

私が抱えている問題は、ViewControllerのdeallocが次のことを行う場合です。

- (void)dealloc
{
  [UIBUttonSubClassesArray release];
  [super dealloc];
}

UIButtonサブクラスのdeallocが呼び出されていません。したがって、これらのサブクラスのviewプロパティの追加リリースは呼び出されず、View Controllerの割り当てが解除された場合でも、これらのUIButtonサブクラスごとにViewControllerのビューが1回リークされます。

ただし、代わりにサブクラスのビュープロパティを割り当てにすると、deallocでreleaseを呼び出す必要がなくなり、deallocが呼び出され、ビューを参照するコードがない場合でも、アプリがクラッシュします。

何か案は?

4

1 に答える 1

0

ビューコントローラーが保持サイクルにない場合は、ボタンの追加の保持プロパティを nil に設定することで、dealloc (および viewDidUnload も) でサイクルを中断できます。

そもそも保持サイクルを作成しないことが常に望ましいですが、あなたのケースで保持サイクルをどのように回避すべきかについてのあなたの質問には十分な手がかりがありません。

于 2012-05-10T02:38:42.200 に答える