CGImageRef
似乎没有任何变异操作。复制CGImageRef
不会复制CGDataProviderRef
(通过实验确定)。因此,如果CGImageRef
是不可变类型,是否有任何理由copy
与retain
?
答案 0 :(得分: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
。在绘制图像时也可以复制。
当然,这是一个非常好的“子类化”设计(因为我们有结构而不是对象,所以不是真正的子类化。)
答案 1 :(得分:0)
没有。有时您需要copy
,例如,您可以CGImageRef
支持UIImage
,但尝试retain
它是不好的做法 - 在这种情况下你会做copy
。