iphone - 制作 UIImage 的深拷贝

标签 iphone objective-c memory-management

我的类包含一个 UIImage 属性,我想将其强制为任何外部客户端访问它的“复制”属性。但是,当我尝试在我的自定义 setter 中进行复制时,我收到有关 UIImage 不支持 copyWithZone 的运行时错误。那么,确保遵循正确的所有权政策的好方法是什么?

// declared in the interface as:
@property (nonatomic, readonly, copy) UIImage *personImage;

// class implementation
- (void)setPersonImage:(UIImage *)newImage
{
    if (newImage != personImage) 
    {
        [personImage release];

        // UIImage doesn't support copyWithZone
        personImage = [newImage copy];
    }
}

最佳答案

这里有一个方法:

UIImage *imageToCopy = <# Your image here #>;
UIGraphicsBeginImageContext(imageToCopy.size);
[imageToCopy drawInRect:CGRectMake(0, 0, imageToCopy.size.width, imageToCopy.size.height)];
UIImage *copiedImage = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();   

我需要这个的原因是我有一个用 imageWithContentsOfFile: 初始化的图像变量,我希望能够从磁盘中删除文件但保留图像变量。我惊讶地发现当文件被删除时图像变量变得疯狂。它显示古怪的随机数据,即使它是在文件被删除之前初始化的。当我首先进行深度复制时,它工作正常。

关于iphone - 制作 UIImage 的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002040/

相关文章:

ios - 一个属性字符串如数组

iphone - 从 JSON 到 NSArray

memory-management - bytes.Buffer 是否执行大量重新分配?

iphone - iPhone 应用程序中的 JSON 解析

iphone - IOS RESTKIT HTTP PUT 示例

iphone - XCode4 构建问题 - 代码签名身份临时缺失

ios - 证书尚未生效

iphone - 如何在 iOS 中对黑色透明图像进行颜色填充?

python - 在 Python 中删除一个对象和对它的所有引用?

javascript - 销毁 DOM 元素时如何处理内存?