2011-12-23 100 views
1

我正在使用ios 5和ARc启用。所以在下面的例子中,我得到了内存泄漏警告......但自从使用ARC,我不能使用autorelease。请有人提出任何建议吗?对象的潜在泄漏 - Xcode - ios5

-(void)coreImageEffect{ 
    CIImage *inputImage = [[CIImage alloc] initWithImage:blurImage.image]; 
    CIFilter *hueAdjust = [CIFilter filterWithName:@"CIHueAdjust"]; 

    [hueAdjust setDefaults]; 
    [hueAdjust setValue:inputImage forKey:@"inputImage"]; 
    [hueAdjust setValue:[NSNumber numberWithFloat: 3.4f] 
    forKey:@"inputAngle"]; 

    CIImage *outputImage = [hueAdjust valueForKey:@"outputImage"]; 
    CIContext *context = [CIContext contextWithOptions:nil]; 

    blurImage.image = [UIImage imageWithCGImage: 
    [context createCGImage:outputImage 
    fromRect:outputImage.extent]]; 

    } 

我不能使用[CIContext Autorelease]; 问题显示CIContext“方法返回+1保留计数的核心基础对象”

请建议。

回答

11

-createCGImage:…返回一个核心图形对象,它不是一个Objective-C对象,不会被ARC管理。所以,你必须手动CGImageRelease它:

CGImageRef cgImage = [context createCGImage:outputImage 
            fromRect:outputImage.extent]; 
blurImage.image = [UIImage imageWithCGImage:cgImage]; 
CGImageRelease(cgImage); 

但为什么不直接使用+imageWithCIImage:

blurImage.image = [UIImage imageWithCIImage:outputImage]; 
+0

thnks。我的问题解决了! – 2011-12-23 17:29:35

+0

还有一个问题Kenny:我想将我的Iphone应用程序发送给我的一些朋友在他们的模拟器上进行测试,然后将我的项目上传到iTunes市场。我怎么能这样做?我有ios 5,xcode 4.2 似乎没有选择在这个xcode通过我可以发送.ipa文件。 有人也说过,adhoc发行是唯一的限制,但我相信,有一个更简单的方法来做同样的事情。 – 2011-12-28 05:50:28

+0

@RanajoyRoy:如果你不想通过Ad Hoc,你可以给他们发送源代码。对于.ipa,请参阅http://stackoverflow.com/questions/5265292/xcode-4-create-ipa-file-instead-of-xcarchive。 – kennytm 2011-12-28 07:08:19