我对iPhone开发相对较新,但已经是Windows程序员20年了。
我最近被要求开发一个应用程序,它可以读取外部传感器数据,创建内存中的热图图像,然后将图像渲染到屏幕上。
Xcode v4.6.2 - iOS 6.1 Simulator / 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仍然是灰色的。我找不到任何错误,没有抛出异常。 image对象不为null,并且所有代码行都成功执行。
调用 setNeedsDisplay 似乎也无济于事。
我已经在这个问题上摸不着头几天了。
是否有可能:
(a)硬件配置文件是不完整的?或者(b)当我在硬件上运行时,视图中的UIImageView以某种方式与代码引用断开连接?
答案 0 :(得分:0)
原来(使用Apple的说法)我这是一个解除分配错误。
在图像创建例程结束时,我试图释放所有用于构建图像的资源,只留下最终图像本身。
其中之一是中间图像的像素缓冲区。一旦我删除了dealloc,图像开始显示在iPhone上。
我已经运行了几个小时的应用程序,没有任何内存泄漏的迹象。我想ARC正在照顾它。
奇怪的是没有报告错误或警告。
模拟和真实硬件之间的众多差异之一。