問題タブ [viewdidunload]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - NavigationController使用中のビューのメモリ管理
アプリケーションのナビゲーションをUITabBarControllerの使用からuUINavigationControllerに変更しました。つまり、以前のソリューション(最初のバージョン)は、TabBarController-4つのViewController(1つの単純なTableView、1つの単純なカスタムビュー、および多くのオーバーレイを備えた1つのMapView)のみに基づいていました。2番目のバージョンは、UINavigationControllerのみに基づいています。
TabBarControllerの場合、それは明確で単純であり、すべてが正常に機能しました。特にMapViewは正常に機能しました。つまり、MapViewは一度(かなりの数のオーバーレイで)ロードされ、別のビューに移動してMapViewに戻ると、MapViewはまだそこにあり、オーバーレイは既にロードされて表示されています(簡単なチェック:MapViewのviewDidLoadが呼び出されました)アプリの実行ごとに1回だけ、そこにいくつかのデバッグメッセージがありました)。
ここで、ナビゲーションロジックをUINavigationControllerに変更しました。最初の外観ではすべて正常に機能しますが、ビューに移動するたびに(各ビューの)viewDidLoadが呼び出されます。特にMapViewの場合は煩わしいです。オーバーレイの読み込みは毎回実行され、時間がかかり、場合によってはアプリがクラッシュします。
OK、私の質問:
これは、NavigationControllerのある種の「一般的な」動作ですか?
この動作を変更して、viewDidLoadが1回だけ呼び出されるようにすることはできますか?
その他-ビューの「表示シーケンス」にどのように影響を与えることができますか?
ロジックはおそらくもっと複雑だと思いますが、答えやヒントはありがたいです;)
いくつかの関連する状況:
- TabBarとNavigationコントローラーは組み合わされていません。
- 私はストーリーボードを使用しています。セグエはUIBで設計されており、コードでperfomSegueやprepareForSegueのような手動呼び出しはありません。1つのボタンでMapViewへのセグエがトリガーされます。
- プッシュセグエを使用しています。
- また、モーダルセグエを使用しようとしましたが、その動作は変更されていません。
- ビュー間のセグエ中にviewDidUnloadが呼び出されることはありません。
- メモリ警告を受信しませんでした。
- シミュレータとiPhone4の両方で測定されたメモリリークはありません。
- ナビゲーションだけを気にする非常にシンプルな一時的なプロジェクト/アプリを作成しようとしました。コーディングなしのコントローラーおよびその他のビュー、ストーリーボードのみ。それは同じ振る舞いでした。
- 1つのビューとMapViewの間でナビゲーションボタンと戻るボタンを高速かつ定期的にタップすると、アプリがクラッシュする問題がありました。ほとんどの場合、完全に表示される前に(つまり、オーバーレイ)MapViewの戻るボタンをタップすると、アプリがクラッシュしました。1秒追加すると修正されました。MapViewのviewDidDisappearedでのdelayメソッド呼び出し。それは公正な修正ではありません、私は知っています;)
ios - ViewController のロード後にアプリの実行が遅くなり、約 15 ~ 20 回アンロードする
使用: Xcode 4.6 ストーリーボード ARC モデル セグエ to SecondViewController
デバイスが右に回転したときに新しい veiwController をロードするメイン ViewController を持つアプリがあります。アプリが起動すると、すべてがうまく機能します。デバイスを回転させてから、2 番目のビュー コントローラーをアンロードすると、約 15 ~ 20 回、アプリの動作が非常に遅くなります。2番目のView Controllerがロードされたときにのみ発生し、デバイスを何回も回転させたときにのみ発生することを絞り込みました。また、メモリの問題であると絞り込みました。使用済みおよび使用可能なメモリを追跡するアプリをインストールしました。デバイスを何度も回転させると、メモリが 400mb から 900mb になります。できるだけ多くの情報を提供しようとしています。各ビューには、毎秒起動する 8 つの NSTimer があります。
ビューがアンロードされていることを確認するために、プログラムでビューをアンロードする方法はありますか?
ロードとアンロードを確実にするために、次のコードを含めました。
`- (void)setView:(UIView *)aView { NSLog(@">>> Entering %s <<<", PRETTY_FUNCTION );
}
ログ結果: 2013-04-22 16:42:03.588 xxxxxxxx[xxxxxxx] >>> 入力 -[GraphViewController setView:] <<< 2013-04-22 16:42:03.589 xxxxxxxx[xxxxxxx] <<< 終了 -[ GraphViewController setView:] >>>
` これを修正するために何を見ればよいかわかりません。
正しい方向への「ポイント」は非常に高く評価されます。
ありがとう
objective-c - XCode 4.6.2 で、UITextView にアウトレットを作成すると、viewDidUnload メソッドが自動生成されるのはなぜですか?
ストーリーボードで作成した単純な「About」ビューがあります。基本的にそれが持っているのはUITextView
. コントローラーは次のようになります。
コードに丸みを帯びたコーナーを追加できるように、UITextView のアウトレットを追加したいと考えています。ストーリーボードからandの間にCtrl
+ ドラッグしてアウトレットaboutBlurbを呼び出すと、次のようになります。@interface
@end
AboutViewController.m
私の質問は、XCode がviewDidUnload
メソッドを挿入してプロパティをnil
ing するのはなぜですか? aboutBlurb
ARC では、メソッドnil
内でプロパティを指定する必要はないと考えました。viewDidUnload
さらに、Apple は iOS 6 でメソッドを完全に廃止したと思っていました。メソッドが自動生成されるviewDidUnload
合理的な理由はありviewDidUnload
ますか、それとも安全に削除できますか?
ios - ARC ベースのアプリでメモリを解放しますか?
私は多くのNSDictionaries
andを使用しているNSArrays
ため、現在すべてを at に割り当てviewDidload
、すべてを nil にしていViewDidDisappear
ます。
これで記憶が薄れますよね?
ios - iOS UIViewController、viewDidUnload で「self」が「wild pointer」になるのはなぜですか?
私のコードスニペット:
まれな状況で、アプリがラインでクラッシュしましたself.noDataView = nil;
。でデバッグするpo self
と、現在のコントローラー以外を指しているように見えました。考えられる理由は?
PS:self.tableView
のdelegate
andはinメソッドdataSource
に設定されています。それはこれと関係がありますか?self
init
ios - MvvmCross のライフサイクル
ルートに TableViewController を持つ Mvvmcross アプリがあります。各行は DetailViewController を開きます。それぞれの内部では、EditViewController で編集できます。
したがって、ビューごとに ViewModel があります。私はここで2つの問題を扱っています:
1)DetailViewControllerで、データベースメッセージにサブスクライブします。閉じるときは、この subscribeToken を破棄する必要があります。したがって、DetailViewController が破棄されたときにこれを呼び出す必要があります。しかし、editViewControllerを開くと、DetailViewControllerが聞く必要があるというメッセージが送信されるため、消えたときに呼び出すことはできません。
したがって、ViewDidDisappear メソッドで破棄することはできません。しかし、他のオプションは ViewDidUnload にあります。ただし、このメソッドは MemoryWarnings でのみ呼び出されます。したがって、トークンを破棄していません。それはよくありません。
2) 他の問題は、私が開いている DetailsViewcontroller ごとに、現在の ID を設定に保存する必要があることです。そして、離れるときは、設定から削除する必要があります。したがって、ここでも同じ問題が発生します。ViewDidDisappear で削除すると、EditViewController にいるときに削除されますが、そこに設定する必要があります。しかし、ViewDidUnload でのみ削除すると呼び出されず、この変数を削除する必要があります。
両方のケースで OnDestroy メソッドをいつ呼び出す必要がありますか?
Android では、OnDestroy を呼び出しています。iOSのどこで呼び出す必要がありますか?
よろしくお願いします。