CGImageCreateCopy与CGImageRetain

时间:2013-05-23 05:41:27

标签: ios cocoa core-graphics

CGImageRef似乎没有任何变异操作。复制CGImageRef不会复制CGDataProviderRef(通过实验确定)。因此,如果CGImageRef是不可变类型,是否有任何理由copyretain

2 个答案:

答案 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