0

私は iPhone 開発には比較的慣れていませんが、Windows プログラマーとして 20 年以上の経験があります。

私は最近、外部センサー データを読み取り、メモリ内のヒート マップ画像を作成し、その画像を画面にレンダリングするアプリの開発を依頼されました。

Xcode v4.6.2 - iOS 6.1 シミュレーター/iPhone 5。

(少し努力した後)私は成功しました。シミュレーターでセンサーが読み取られ、イメージ ファイルがビルドされ、ライブラリから CGImageRef として返されます。次に、次のコードを使用して、View Controller 内の UIImageView オブジェクトに読み込みます。このような:

// Line edited to remove transcription error
CGImageRef cgimg = [sensor getSensorImage : 200 : 200]; 
UIImage* image = [UIImage imageWithCGImage : cgimg];

imageView.image = image;

これは 6.1 シミュレーターで問題なく動作し、ヒート マップは正しく表示され、画面にレンダリングされます。iPhone 5 を接続して実行すると、何もレンダリングされません。UIImageView は灰色のままです。私が見つけることができるエラーはなく、例外もスローされません。画像オブジェクトは null ではなく、コードのすべての行が正常に実行されます。

setNeedsDisplayを呼び出しても、役に立たないようです。

私はこれについて何日も頭を悩ませてきました。

それは可能ですか:

(a) ハードウェア プロビジョニング プロファイルが不完全ですか? または (b) ハードウェアで実行すると、ビュー内の UIImageView が何らかの形でコード参照から切断されますか?

4

1 に答える 1

0

(Apple の用語を使用すると) それは私の側の割り当て解除エラーだったことが判明しました。

イメージ作成ルーチンの最後に、イメージの作成に使用されたすべてのリソースを解放しようとして、最終的なイメージ自体だけを残しました。

これらの 1 つは、中間イメージのピクセル バッファでした。その上でdeallocを削除すると、画像がiPhoneに表示され始めました。

アプリケーションを数時間実行しましたが、メモリ リークの兆候はありませんでした。ARCはそれを処理していると思います。

エラーや警告が報告されなかったのは奇妙です。

シミュレートされたハードウェアと実際のハードウェアの多くの違いの 1 つにすぎません。

于 2013-06-13T20:45:31.790 に答える