ios – CGImageCreateCopy与CGImageRetain

CG
ImageRef似乎没有任何变异操作.复制CGImageRef不会复制CGDataProviderRef(通过实验确定).因此,如果CGImageRef是一个不可变类型,是否有任何理由复制与保留? 最佳答案

A CGImageRef doesn’t appear to have any mutating operations

没有公共函数来修改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.在绘制图像时也可以进行复制.

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

点赞