21

私のアプリは iOS6 では正常に動作しますが、NDA の理由で名前を付けられない未特定の今後のバージョンの iOS では、すべてのUIViewController遷移アニメーションが機能しなくなります。新しいビューがすぐに表示されます。iOS6 でときどき発生するのを見たので、この特定されていない将来のバージョンの iOS が原因であるかどうかはわかりません。

アニメーションがしばらく動作し始め、すぐに停止することがあります。これは、ある種のメモリ警告の問題だと思いますが、私のアプリはほとんどの場合、かなり妥当な ~125 MB の RAM を使用しています。誰でもアドバイスや調査すべきことを提供できますか?

4

4 に答える 4

40

説明されている動作は常に存在します。バックグラウンド スレッドで作業してから UIKit メソッドを呼び出すと、多くの場合、更新が奇妙な方法で遅れます。

このため、UI を更新するには常にdispatch_asyncメイン キューを使用する必要があります。

これらのバグは、常に予測どおりに発生するとは限らないため、見つけるのが非常に困難です。

それらをキャッチするために、いくつかの UIKit メソッドを切り替えて、それらがメイン スレッドで呼び出されているかどうかを確認するメソッドを作成しました。これにより、メイン キューにディスパッチするのを忘れたときはいつでも、シンボリック ブレークポイントで停止できます。

https://github.com/Cocoanetics/DTFoundation/blob/develop/Core/Source/iOS/Debug/UIView%2BDTDebug.m

于 2013-08-22T06:03:19.793 に答える
0

この問題は、バックグラウンド スレッドで UIKit を実行したことが原因のようです。複雑な UIView を UIImage にレンダリングして出力をキャッシュする NSOperations でいっぱいのプリレンダリング キャッシュがあります。これは iOS6 では問題なく動作するように見えましたが、おそらく一線を越えています。この機能を、UIViews と UILabels をまったく使用するのではなく、画像とテキストをグラフィックス バッファーにレンダリングするものに置き換える必要があります。

于 2013-08-20T18:46:32.213 に答える