2

おはようございます、

すべてがスムーズに実行され、メモリリークが発生していないことを確認するために、私が取り組んできたこのアプリケーションの微調整を行っていました。そのため、Instruments を使用してアプリを実行し、割り当てとリークのツールを選択しました。

私のアプリは、Insturments がたまたま UIImage であるリークされたオブジェクトを検出するまで、完全に正常に動作していました。私を混乱させたのは、私が ARC を使用していたことでした。私の理解では、すべての保持/解放/自動解放呼び出しが処理されていたということでした。

私を混乱させたもう1つのことは、リークの拡張詳細を見たときに、責任フレームが[UIImage imageWithCGImage:scale:orientation]であることが示され、アプリケーション全体でそのメソッドを呼び出したことはなく、それは私のワークスペースにあり、結果は得られませんでした。

リークされたオブジェクトをダブルクリックしてXcodeで開くと、フレームが開き、「使用できません」と表示されました。以下のスクリーンショット:

楽器のスクリーンショット

また、その右側にある Xcode ロゴをクリックしても、まったく役に立ちませんでした。私はこれが何であるかをデバッグしようとしてきましたが、困惑しました。割り当て解除されたオブジェクトを使用しようとした場合に備えて、NSZombieEnabled が YES に設定されていることを確認しましたが、解決策が見つかりません。なぜこれが起こっているのですか (ARC の下で)、どうすれば修正できますか?

ありがとう、

編集:これは私が持っているリークの最新のスナップショットです これは、リークのために私が持っている最新のスナップショットです

4

3 に答える 3

3

さて、リークはおそらくフレームワーク内のどこか(UIKitまたはそれより深いところ)から発生しています。もしそうなら、それについてあなたができることはあまりありません。それは、後で UIKit ([UIImage imageWithCGImage:scale:orientation]) の奥深くに表示される、アプリケーション内からの何らかの「副作用」であるか、UIKit 自体に何らかの問題があるかのいずれかです。しかし、最終的には確実に判断するのは難しいです!

ARC を使用しても、100% メモリ リークのないコードが保証されるわけではありません。;)

于 2013-01-02T15:34:58.450 に答える
1

更新

コードのデバッグに 1 日を費やし、アプリが約 400 バイトしかリークしていないにもかかわらず、リークなしで出荷したいと思った後、リークなしになりました。@Nenad M のご協力に感謝します。私のリークの非常に奇妙なソースが、私の UITabBar の selectedImageTintColor を [UIColor blueColor] に設定していたことが判明しました。これにより、CoreGraphics や UIKit の奥深くで [UIImage imageWithCGImage:scale:orientation] 呼び出しがどこかでトリガーされ、ARC によって解放されなかったに違いありません。

これは非常に小さなリークでしたが、アプリをリークなしで出荷することをお勧めします!

于 2013-01-03T00:41:13.430 に答える