0

我对 iPhone 开发相对较新,但我已经做了 20 年以上的 Windows 程序员。

我最近被要求开发一个应用程序,它可以读取外部传感器数据,创建内存热图图像,然后将图像渲染到屏幕上。

Xcode v4.6.2 - iOS 6.1 模拟器/iPhone 5。

(经过一番努力)我成功了。在模拟器上,传感器被读取,图像文件被构建并从我的库中作为 CGImageRef 返回。然后,我使用以下代码将其加载到我的视图控制器中的 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 保持灰色。我找不到任何错误,也没有抛出异常。图像对象不为空,所有代码行都执行成功。

调用setNeedsDisplay似乎也没有帮助。

这几天我一直在挠头。

有没有可能:

(a) 硬件配置文件不完整?或 (b) 当我在硬件上运行时,视图中的 UIImageView 以某种方式与代码引用断开连接?

4

1 回答 1

0

事实证明(使用苹果的说法)这是我的一个取消分配错误。

在图像创建例程结束时,我试图释放用于构建图像的所有资源,只留下最终图像本身。

其中之一是中间图像的像素缓冲区。一旦我删除了它的 dealloc,图像就开始出现在 iPhone 上。

我已经运行该应用程序几个小时,没有任何内存泄漏迹象。我猜ARC正在处理它。

奇怪的是如何没有报告错误或警告。

这只是模拟硬件和真实硬件之间的众多差异之一。

于 2013-06-13T20:45:31.790 回答