这个帖子是错误的,使用Image I/O创建的UIImage对象copy之后还是会使用解码过的图片数据,很尴尬,这里我搞错了一些东西,假设有这样的两个属性:
@
property (retain, nonatomic) UIImage *retainImage;
@
property (copy, nonatomic) UIImage *copyImage;
使用Image I/O创建了一个开启缓存的图片,并分别赋值给上面两个属性
UIImage *image = ...
self.retainImage = image;
self.copyImage = image;
到这里一共存在三个类型为UIImage的指针,两个类型为UIImage的对象,一个是使用Image I/O创建的,一个是在赋值给copyImage属性的时候创建的,ARC会分别计算这两个UIImage对象的引用数来决定是否要释放这些对象所占用的内存,但是需要指出的是,这两个UIImage对象里的_imageRef指向的是同一个地址!Image I/O是根据这个地址来决定是否要使用解码过的图片的,那么我的这个帖子根本就是错误的,如果有人被我误导了,在这里我向你道歉。
也许苹果开发swift的原因之一就是因为有些开发者会像我一样对跟指针相关的东西产生困惑吧,虽然苹果在让使用obj c的开发者尽量远离手动管理内存方面做了很多努力,但是只要使用指针就难免要和程序背后冰冷的机器打交道,哈,不过也不知道v2ex上有多少人能看出来我的这个帖子是错误的呢?如果有人看出来却没有说出来,我只能说兄弟你不厚道啊。