4

ACGImageRef似乎没有任何变异操作。复制aCGImageRef不复制CGDataProviderRef(通过实验确定)。所以 ifCGImageRef是一个不可变类型,有什么理由copyvs.retain吗?

4

2 回答 2

2

CGImageRef 似乎没有任何变异操作

没有要修改的公共函数CGImage,但这并不意味着CGImageRef它是不可变的。CGImageRef是不透明的,即内部结构没有记录,但仍有修改方法。

CGImageRef imageRef = ...
struct CGImage image = *imageRef;
//if you know the internal structure, you can do things like
image.provider = ...

我猜 Core Graphics 经常制作图像的内部副本,例如,CGImageCreateCopyWithColorSpace可能在CGImageCreateCopy内部使用。绘制图像时也可以进行复制。

当然,这是一个非常好的“子类化”设计(不是真正的子类化,因为我们有结构,而不是对象)。

于 2013-05-23T12:29:31.540 回答
0

不。有时你需要copy,例如你可以得到CGImageRef支持 aUIImage但尝试它是不好的做法retain- 在这种情况下你会做 a copy

于 2013-05-23T11:22:39.020 回答