UIImage initWithData在iOS 4.3上的行为有所不同

时间:2011-03-10 16:04:37

标签: ios ios4

我有一个应用程序在App Store中运行了6个月左右,但它的图像(通过“NSURLConnection initWithRequest”从网站下载)都没有出现在iOS 4.3中。事实证明,我有一行代码如下:

UIImage *img = [[UIImage alloc] initWithData:data];

此后不久,为了准备下一张图片,我这样做了:

data.length = 0;

当我注释掉将长度设置为零(将其推迟到下一个图像的下载开始)时,它适用于iOS 4.3。

我仔细检查过以确保没有缓冲区干扰,但我的每个图像都在其自己的对象实例中,该对象将缓冲区(数据)作为实例变量。

在我看来,在iOS 4.3中,当方法返回时,initWithData实现并没有完全用数据完成。也许有些工作被推迟到将UIImage分配给UIImageView,稍后会发生这种情况?甚至可能推迟到呈现UIImage之前?

任何人都可以了解iOS 4.3中这种看似新的行为吗?

1 个答案:

答案 0 :(得分:1)

我认为你的分析听起来是正确的。很容易想象会导致这种变化的小变化,例如UIImage可能已被更改以保留数据而不是复制它,或类似的东西。我向Apple提交了一个错误,以确保有人注意到该问题,然后通过将代码更改为:

来解决此问题。
UIImage *img = [[UIImage alloc] initWithData:[[data copy] autorelease]];

至少,我认为它会解决它。如果它没有,那将是非常有趣的...请让我们知道这种或那种方式。