2017-03-15 15 views
0

私は、いくつかのボタンをレイアウトし、その状態を説明することで、カスタムを構築しています。UISegmentedControl選択されたときに、それに応じて外観を変更するために、TouchUpInsideリスナーを添付しています。問題は、メモリリークを避けるためにこれらのリスナーを削除する場所がわからないことです。 UIViewUIControlのようにViewDidDisappearが表示されていない場合は、リスナーを削除するために使用しているUIViewControllerのようになります。カスタムコントロールをクリーンアップする方法は?

これらのリスナーはどこから削除する必要がありますか?

答えて

1

私は、次が呼び出されたときに見て示唆し、彼らはUIViewのためのあなたのニーズに合うかどうかを確認します:

didAddSubview :, willRemoveSubview:必要に応じてサブビューの追加と削除を追跡するために、これらのメソッドを実装します。 willMoveToSuperview :, didMoveToSuperview必要に応じてこれらのメソッドを実装して、ビュー階層内の現在のビューの移動を追跡します( )。

willMoveToWindow :, didMoveToWindow必要に応じてこれらのメソッドを実装して、別のウィンドウへのビューの動きを追跡します。

(このSOポストから取った上:SO Reply)これは、あなたが「スーパービューが」ビューでやっているものをフォローできるようになり、それが却下されていたときに、あなたのクリーンを実行することができるはず

アップコード。

0

"リスナー"を削除する必要はありません。 UIControlターゲットに強い参照を保持していない - ドキュメントからaddTarget(_: action: for:)のために:

は、コントロールがターゲットパラメータ内のオブジェクトを保持しません。ターゲットオブジェクトがコントロールにアタッチされている間は、ターゲットオブジェクトへの強い参照を維持するのはユーザーの責任です。

+0

xamarinの場合はそうですか? – nicks

+0

私は考えていません、申し訳ありませんが、私はXamarinタグに気付かなかった。それがフードの下でUIKitを使用している場合は、はい – jrturton

関連する問題