【问题标题】:UIImagePNGRepresentation Leaking memoryUIImagePNGRepresentation 内存泄漏
【发布时间】:2012-08-05 05:46:08
【问题描述】:

我在我的代码中使用了下面的行

  NSData *dataForImage=UIImagePNGRepresentation(image);

我的应用程序由于内存不足而崩溃。当我使用 VM 跟踪器/分配时,它会显示堆增长。我分析了代码。它显示我在上面的线上泄漏为 100%。 UIImagePNGRepresentation 方法是否需要更多的内存分配?据我所知,它返回一个自动释放的对象。

如果我做错了什么,请告诉我。

编辑: 它没有显示泄漏仪器中的泄漏。我使用了分配工具,然后对特定功能进行了快照。它向我展示了堆增长。我认为它是在更多使用应用程序后导致应用程序崩溃的原因。在我使用“扩展详细信息”的 heapshot 中,它在上面一行显示 100%

编辑:希望这会有所帮助

-(IBAction)Save{

                MyInfo *myInfo = [[MyInfo alloc]init];
                if (theimageView.image != nil) {

                     UIImage *image=[theimageView.image fixImageOrientation];
                    [myInfo set_image:image];
                    NSData *dataForImage=UIImagePNGRepresentation(image);
                    image=nil;

                    [myInfo set_imageData:dataForImage];
                    dataForImage=nil;
                }
  [tempArray addObject:myInfo];
  [myInfo release];
  myInfo=nil;
  // Here I have added myInfo object in array and released that object


 }

在上面的代码中,fixImageOrientation是为UIImage写的一个类别。

【问题讨论】:

  • 它是真的显示你在那条线上的泄漏(使用 Leaks 工具),还是只是显示你的分配(在 Allocations 工具中)?无论哪种方式,您都需要向我们展示所有使用dataForImage 的代码。
  • 泄漏仪器未显示泄漏。我使用了分配工具,然后对特定功能进行了快照。它向我展示了堆增长。我认为它是在更多使用应用程序后导致应用程序崩溃的原因。在我使用“扩展详细信息”的 heapshot 中,它在上面一行显示 100%
  • 您仍然需要编辑您的问题以包含所有使用dataForImage 的代码。
  • No rob...我没有使用 ARC...我的应用程序从相机拍照,并在保存时调用了上述保存方法
  • 好吧,你说你将myInfo添加到一个数组中,然后释放myInfo。您需要向我们展示该代码,并且您需要向我们展示从数组中删除 MyInfo 对象的代码。

标签: objective-c ios uiimagepngrepresentation


【解决方案1】:

我的猜测是导致问题的UIImagePNGRepresentation(image) 方法。你需要排空游泳池。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSData *dataForImage=UIImagePNGRepresentation(image);

[pool release];

或在 ARC 中

@autoreleasepool
{
    NSData *dataForImage=UIImagePNGRepresentation(image);
}

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    相关资源
    最近更新 更多