我试图剪切图像并将其屏蔽......我能够成功完成..但程序在几分钟后以101状态退出
- (void) maskImage {
if(scopeOn==1){
UIGraphicsBeginImageContext(self.bounds.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
cachedImage=[UIImage imageNamed:@"loop.png"];
cachedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageRef = [cachedImage CGImage];
subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(scopeLoc.x-25, scopeLoc.y-25, 50, 50));
xMaskedImage = CGImageCreateWithMask(subImage, mask);
zoomImg.image = [UIImage imageWithCGImage:xMaskedImage]; // retImage;
[zoomImg setCenter:scopeLoc];
[self addSubview:zoomImg];
CGImageRelease(subImage);
CGImageRelease(xMaskedImage);
}
}
这是我正在使用的代码....因为我没有分配显式内存我的猜测是CGImageCreateWithImageInRect函数正在分配内存但它没有被释放...这个函数每隔0.1秒被调用...所以最终分配了大量的memoey(我已经在内存泄漏性能监视器中看到了这一点)
那么有没有其他方法可以实现与此功能相同的方式?
答案 0 :(得分:4)
您是否稍后发布了subImage变量? CGImageCreateWithImageInRect遵循CoreFoundation中的“创建”规则,因此需要您稍后释放该变量。
答案 1 :(得分:1)
您可以通过以下
释放为subImage和xMaskedImage分配的内存 CGImageRelease(subImage); // Decrements the retain count of a bitmap image.
subImage=nil;
CGImageRelease(xMaskedImage);
xMaskedImage=nil;
它肯定会解决你的问题。
答案 2 :(得分:0)
如果zoomImg
已经是子视图,可能会尝试添加测试:
if (zoomImg.superview != self)
[self addSubview:zoomImg];
虽然这是一个相当长的镜头。