2013-10-18 49 views
0

我试图在拍照后剪下图像。这在非Retina设备上正常工作。但在Retina设备上收到内存警告。我认为在我注释掉图像的情况下会有一些内存泄漏,没有问题。iOS在切割图像时收到内存警告

代码:拍照后

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    CGSize imageSize = image.size; 
    CGFloat width = imageSize.width; 
    CGFloat height = imageSize.height; 
    CGFloat newDimension = 2360; 
    CGFloat widthOffset = 20 * [[UIScreen mainScreen] scale]; 
    CGFloat heightOffset = 135 * [[UIScreen mainScreen] scale]; 

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(newDimension, newDimension), NO, 0.); 
    [image drawAtPoint:CGPointMake(-widthOffset, -heightOffset) 
      blendMode:kCGBlendModeCopy 
       alpha:1.]; 

    productImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    [self dismissViewControllerAnimated:NO completion:nil]; 

    ... 
} 

第一次,我得到了内存不足的警告,但不会崩溃。当我尝试重新打开相机时,应用程序崩溃。有人可以帮我吗?谢谢

回答

0
@autoreleasepool { 
    ... 
    productImage = UIGraphicsGetImageFromCurrentImageContext(); 
    ... 
} 

autoreleasepool可能会有所帮助。 UIGraphicsGetImageFromCurrentImageContext返回自动释放的UIImage对象,并保持一段时间直到退出autoreleasepool块或主线程上的runloop结束。你的代码的哪一部分应该被autoreleasepool包含,这取决于你的代码。