8

互いにセグエ (モーダル) をトリガーするボタンを持つ 2 つの UIViewControllers があります。前後にジャンプしているときにそれがメモリリークを引き起こしているかどうかを発見したかったのですが、生きているオブジェクトと割り当てられたメモリが増えていることがわかり、最終的にアプリがクラッシュすることになります。純粋な UIViewControllers を操作するコードは 1 行もありません。 絵コンテ

プロファイラー 1

プロファイラー 2 プロジェクトの設定

私は何を間違っているのでしょうか?
プロジェクト設定で何か間違った設定をしたのでしょうか?
プロファイラーの統計をよく読んでいませんか?
セグエの作業中に、特別なリリース コマンドを作成する必要はありますか?

4

1 に答える 1

14

モーダル セグエを正しく使用していません。実装した方法では、元のインスタンスに戻るのではなく、セグエ時に各View Controllerの新しいインスタンスを作成しています。そのため、メモリ使用量が増え続けています。

iOS 6 より前では、これを処理する正しい方法は次のとおりでした。

viewController2Done1)ビュー コントローラ 1のようにメソッドを定義します
。2) ビュー コントローラ 2 で、delegateタイプというプロパティを作成しますid
3) in prepareToSeguefor View Controller 1、delegateView Controller 2 ~self
4) に設定、View Controller 2 で、View Controller 1 に戻る時間になったら呼び出し[delegate viewController2Done]
5) in viewController2Donecall[self dismissModalViewControllerAnimated:YES]

この方法は iOS 6 でも機能しますが、unwind segue代わりに使用できる新しい方法もあります。これを使用するには、View Controller 1 で次のようにメソッドを定義します。

目的 C:

- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue
{
    NSLog(@"and we are back");
}

迅速:

@IBAction func unwindFromViewController2(_ segue: UIStoryboardSegue) {
    print("and we are back")
}

次に、ビュー コントローラー 2 のボタンから、ストーリーボードのビュー コントローラーの上のバーにあるオレンジ色の終了アイコンへのドラッグを制御します。ポップアップで、選択unwindFromViewController2してほら、完了です。

ここに画像の説明を入力

于 2012-10-28T03:48:05.020 に答える