Xcode模拟器中的ARC是否存在已知问题?

时间:2018-10-29 06:46:58

标签: ios

我花了好几个小时来解决一个奇怪的问题:我拍摄PNG图片,将其加载到UIImage*中,然后将UIImage*传递到 Objective-C ++ strong>方法,我提取 RGBA8 数据,对其进行修改,然后根据修改后的数据创建一个新的UIImage*,并将其返回给调用方。

在我生命中,我无法理解为什么,当我查询新图像的底层RGBA8数据时(因为它被压缩了)-我得到的数据与我用方法填充到图像中的数据截然不同。 >

最终,我决定在某些实际设备上尝试使用它,并且低调地看一切正常。 WTF?

我认为它与内存管理有关,因为一旦创建新映像,我将释放一些根本不应该与映像相关联的已分配内存,并且如果我检查映像数据,则可以将其清除。如果我注释掉了内存清理操作,则可以再次检查图像数据,这样就可以了-直到我返回图像,并且指向未签名char * RGBA8 数组的本地实例变量超出范围-即使我没有释放内存。返回图像后,我将使用调用者的方法检查该图像,然后将其再次连接。

将我所有的测试代码移动到iPad Mini 4和9.7英寸iPad上,并运行相同的测试,我可以很好地发布它,并且图像可以在任何地方检出...

FUUUUUUUDGE ...

然后,我又回到了iOS开发领域。也许是我。

1 个答案:

答案 0 :(得分:0)

我倾向于认为您的代码实际上存在问题,因为有数百万的开发人员在使用模拟器,并且像您之前描述的那样的问题现在可能会被注意到。

我的猜测是,您看到的是模拟器比设备更积极地回收内存。我们需要查看您的代码进行确认,但是当您将图像传递给Objective-C代码后,我将进行检查以查看会发生什么。即。仍然保留着什么,如何分配临时内存等。

然后再...可能是模拟器错误:-)