2009-07-05 8 views
4

私は最初のiPhoneアプリケーションを書き終えました。私はそれをベータテスターのグループに送りました。 私のアプリを実行した後、別のアプリがもう起動していないことに気づいたこの1人の男を除いて、誰もが幸せです。iPhone:Leaking Appが他のアプリに害を及ぼすことはありますか?

私は、メモリ管理についてあまり知りませんでしたが、私はInstrumentsのLeaksグラフを見て、アプリケーションに何らかのリークが起こっていることに気付きました。

3つの質問:

  1. は常に悪いが漏れていますか?最大のリークは合計5,1 MBの割り当てメモリで15kです。
  2. Appleはリークのために私のアプリを拒否しますか?
  3. 私のアプリケーションが終了するとすぐにメモリが自動的に解放されるわけではありませんか?漏れているアプリが他のアプリに害を及ぼすことはありますか?

おかげ Sjakelien

+0

あなたのアプリが後で他のアプリケーションの実行方法に影響を与えることに気がついた場合、アプリケーションの終了後もコードの効果が持続することは明らかです。たとえAppleが気づいていないとしても、あなたの批評家のように聞こえます。 –

+1

私たちは再現可能な状況がないので、Sjakelienのアプリが他のアプリに影響を与えたと言っても過言ではありません。我々は、テスターがSjakelienのアプリを実行した後のいつかまで、他のアプリが動作していなかったことに気付かなかったことだけを知っている。 – Chuck

答えて

3

は、アプリケーションの終了を超えて持続する任意のリークがOSのバグであるため、Appleの問題。

これに基づいてアプリを拒否するのは不公平です。
私はそれがあなたへの慰めであるかどうかわかりません。

記録のために、私のアプリはmediaserverdでリークを引き起こします。
3.0GMではリークが少し小さくなっています。

APIの別の不正使用がクラッシュしました。 mediaserverd。
また、3.0GM。不快な。私はエラーコードを好むだろうが、
これは理論的にはリークを回避するために使用することができます。

+1

mediaserverdは入力にはあまり注意しません。私ができる最悪のことは、CPUを食べてバッファループを引き起こすことです(ユーザがデバイスを再起動するまで、すべてのオーディオ/バイブレーションを強制的に消去します)。また、アプリが終了してからオーディオをスケジュールする機能もあります。他の不快なクラッシュが発生しましたか? – rpetrich

+0

2回のクラッシュ(2.xでは1回、3.0では1回)、2.xでは200kリーク、3.0では200バイトがリークします。それはごみです。 –

8

各アプリは独自の「サンドボックス」で動作するはずです。設計上、電話にインストールされている他のアプリには影響しません。あなたの査読者があなたのアプリが本当に別のアプリに影響を与えたケースを発見した場合、それはあなたの過ちではありません。

私の推測では、あなたの査読者の他のアプリがあなたのアプリとは完全に独立して壊​​れていると思われます。彼に問題の再現を試みるように依頼してください(両方のアプリをアンインストールし、他のアプリをインストールし、アプリをインストールしてください)。

+0

あなたはiPhoneOSのバグを見つけ出すのにあまりにも遠く見える必要はありません。 「iPhoneハッカー」はここから始めることができます:http://openradar.appspot.com/search?query=iphone –

+1

バグを再現するには、デバイスを再起動してアプリを実行し、もう一方が壊れていないかどうかを確認します(または、再起動してからもう一方を実行して、それが動作するかどうかを確認してください) – Dimitris

5

他の2つの回答は私が同意すると言いますが、誰も最初の質問に答えていません( "漏れは常に悪いです")。私は彼らがそうであると言うでしょう。あなたのプログラムが問題なく長期間にわたって実行される可能性があります。 OSは終了後にメモリをクリーンアップする必要があります(前に述べたように、OSにバグがない限り)。しかし、最終的には、彼らが十分に長く走ったときに、ある時点で漏れが問題になります。また、問題になっていなくても、あなたが知っているメモリリークを常に修正するのがベストプラクティスです。

1

"メモリ"が漏れているかどうかによって異なります。何かをキャッシュするためにデバイスのストレージスペースを使用していますか?理論的には、一定の空き領域が必要なため、他のアプリが起動できないほど十分なスペースを使い果たした可能性があります。

私たちが物理的な記憶を話しているなら、いいえ。あなたのアプリが死んでいるとき、それは死んでいる。デバイスを再起動して、同じ問題が発生していないかどうかを確認することができます。

1

Appleはメモリリークのあるアプリを承認します。

つまり、ユーザーがアプリを突然シャットダウンしたくないので、アップルに提出する前に「私たちのコード」の漏れがないことを徹底的にチェックします。あなたがしていないフレームワークにメモリリークがあるので私は "私たちのコード"と言います。したがって、Appleはメモリリークのあるアプリを承認します。

また、あなたのアプリがユーザーの他のアプリに悪影響を与えたかどうかは疑問です。私はその行動を見ていない。

関連する問題