【问题标题】:Performing a costly unpadding operation执行代价高昂的取消填充操作
【发布时间】:2013-05-07 22:32:29
【问题描述】:

滤镜效果显示一些警告 执行代价高昂的取消填充操作!应用在图像上后还有一些内存泄漏?

我的代码是:-

        CIImage *imagee = [Filter outputImage];
        CIContext *context = [CIContext contextWithOptions:nil];
        CGImageRef cgImage = [context createCGImage: 
                              imagee fromRect: imagee.extent];
        UIImage *resultUIImage = [[UIImage alloc ]initWithCGImage: cgImage];
        image=resultUIImage; 
        CGImageRelease(cgImage);
        cgImage=nil;
        SaveImage=image;
        [resultUIImage release];

【问题讨论】:

标签: iphone ios


【解决方案1】:

您没有发布您的 CIImage,这很可能是泄漏的来源(Cocoa 内存语义要求类方法返回具有 +0 保留计数的对象,因此它们必须由调用者保留)。同时,您正在对图像执行昂贵的过滤。你看,图像可能会被填充几个额外的字节,以确保它们的行以第 2^n 个字节结束。但是为了加载过滤器,iOS 必须取消填充图像,这涉及进入并遍历其字节以删除填充,这需要一段时间。如果它不影响任何性能方面的事情,您总是可以在后台线程上绘制。我不知道 CIImage 或 UIImage 有多安全,但 Core Graphics 通常是线程安全的。

【讨论】:

  • [context release] 让我的应用崩溃。
  • 嗯...运行有泄漏的仪器
  • -[NSString stringWithFormat:] 等便利构造函数返回自动释放的结果值,因此您不必释放 CIContext。崩溃并不奇怪,因为您过度释放了对象。控制台输出应该包含类似*** -[CIContext release]: message sent to deallocated instance 0x14ce6aa0
  • @TobiasKlüpfel 我的错。我想我的意思是说他对 CIImage 的发布不足,回想起来这更有意义。
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多