質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3053閲覧

[Swift] 画面遷移するたびに重くなる

Abeta

総合スコア11

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/08/02 05:25

前提・実現したいこと

画面遷移するたびに、アプリが重たくなってしまいます。
シミュレーターでは、動いていたのですが、
実機でためした時に数回遷移すると落ちることが頻発したので、不思議に思いました。

メモリの使用量が遷移するたびに多くなっているのでいるので、原因はこれだなと思うのですが、対処法が調べてもよくわかりませんでした。

インスタンスのデータが、どんどん残ってしまっているように感じているのですが...

これに似た事例、対処に必要な知識など、共有いただけたら幸いです!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/08/02 05:31 編集

遷移というのは、進んで戻って、を繰り返すということでしょうか?それとも、進むだけでしょうか?どちらにしても、数回で落ちるというのは、よほど大きなデータを扱っていると思われるのですが、そういうデータに心当たりは?
Abeta

2018/08/02 05:48

進むだけですね。アプリの内容としてはツイッターのようなイメージです。Firebaseを使用しているのですが、投稿したツイートとユーザー情報の関連づけのうまいやり方がわからず、とりあえず全ユーザー情報を取得してしまっています。その部分も原因と関連づいてそうですが...。それからfor文で回して、IDを比較したのち、ユーザーを特定して画面に表示する、というやり方をとっています。
Abeta

2018/08/02 05:51

例えば、ユーザー詳細画面にいき、フォロワー数などが表示されています。そのフォロワー数をタップすると、フォロワーのユーザー一覧に遷移します。そこからまたユーザー詳細画面に遷移して...などを繰り返すと重くなって落ちてしまいますね...
guest

回答2

0

データに関しては通常はAPI側で情報を絞ってクライアントに渡すような作りにするべきだと思います。とは言え、どのようなデータを受け取っているのかもわからず、画面自体の作りもわからないので(データが重い?画面が重い?その他の処理で重いことしていないか?)、どこでメモリを食っているのかがわかりません。暫定的にできる処置として考えられるのはページ遷移ごとに前のページを破棄して常に1ページだけ表示されるようにするなどでしょうか。(元の画面に戻るような遷移がある場合にも必ずページ読み込みが発生するようになってしまいますが)ですが、メモリを食う根本原因を特定して対処するべきだと思います。(シミュレータだと16GB or 32GBのメモリ使えるのに対して、実機だと3GBになりますものね)
ちなみにnavigationControllerで1→2→3→1のような遷移がある場合に新たにインスタンスを作成してプッシュしてしまうと1が2つある状態になってしまいますので1に戻るようにするや1を消すなどの処理が必要です(数回の遷移で落ちてしまうとのことなので今回の件には当てはまらないかも)

投稿2018/08/02 07:01

razuma

総合スコア1313

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

インスタンスのデータが、どんどん残ってしまっているように感じているのですが...

その通りですね。
前に進んでいるだけなら、古いViewControllerは破棄されず全て残っています。
遷移する前に不要なデータは解放しましょう。

それ以前に、取得するデータを必要最小限にすれば、解放しなくて済むような気もしますが。

投稿2018/08/02 05:53

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Abeta

2018/08/02 15:10

ご回答ありがとうございます! 不要なデータの解放... というのはどうすればいいのでしょう?? 調べていると「deinit」メソッドにいきあたりましたが、 これは処理の実行後に処理されるものを記述できる、というメソッドですよね。 遷移したタイミングで消したいので、今やろうとしていることとちょっと違うなと...
fuzzball

2018/08/03 00:04

タイミングの話でしたら、「遷移したタイミングで消したい」のですから、そのタイミングで解放すればいいだけの話ですが‥。
Abeta

2018/08/03 05:44

解放って、初期化、と同じような意味合いですよね? つまり var itemsDict = [NSDictionary]() というような変数があったとして、遷移したタイミングで、 itemsDict = [NSDictionary]() と入力して値を消す、みたいなイメージでしょうか??
fuzzball

2018/08/03 05:50

>>解放って、初期化、と同じような意味合いですよね? どっちかというと逆の意味なんですが‥。 >>みたいなイメージでしょうか?? そうです。
Abeta

2018/08/07 04:32

ある程度軽くなりました。 ただ根本的な原因は、データの解放系の処理というよりは、 画面に表示するための処理にメモリを使いすぎているように思うため、 また調整して行こうと思います! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問