これは、アプリがメモリ警告を受け取ったときに行うべき正しいことを完全に理解していないことに起因する可能性があると思います (または、メモリ警告を受け取ったときに iOS が独自に行うことを理解していない可能性があります)。
ここに私の問題の簡略版があります:
私は持っていRootViewController
ます。TextViewController
それは私が持っている場所をプッシュしUITextField
ます。は、いくつかの詳細を表示TextViewController
する を押すことができDetailViewController
ます。
までプッシュするDetailsViewController
と、ナビゲーション ビュー コントローラー スタックが[RootVC, TextVC, DetailVC]
になり、メモリ警告をシミュレートして、TextVC
iOS によってメモリから自動的にアンロードされます。
問題 1: iOS が View Controller をアンロードする必要があると判断しました。ユーザーがポップDetailVC
して に戻るときTextVC
、状態情報 (テキスト フィールドに入力されたテキストなど) をどこに保存すればよいですか? 現在、View Controller がアンロードされてから再ロードされたため、テキスト フィールドは空白に戻ります。
問題 2:テキスト フィールドに戻ってTextVC
タップすると、アプリがクラッシュします。ゾンビをオンにすると、テキスト フィールドをタップしたときに、どこかからメッセージを受け取っている人UIView
がいることがわかりました。responderDidBecomeActive:
これはARCでもどのように可能ですか? 私のviewDidUnload
方法では、テキスト フィールドを nil に設定し、デリゲート プロパティを nil に設定しています。
編集。新しい質問:オーバーライドdidReceiveMemoryWarning
しTextVC
て何もしないようにすることで、すべてを完全に修正しました。1から非常に悪いまでのスケールで、これはどの程度悪いですか?
EDIT 2.冗談ですが、私はばかで、まったく異なるが関連するコードで通知のオブザーバーを削除するのを忘れていました。iOSがあなたのがらくたを捨てたときに、状態情報がどのように/どこに保存されることになっているのか、まだわかりません。