【问题标题】:memory leaks NSData [closed]内存泄漏 NSData [关闭]
【发布时间】:2012-09-10 15:53:10
【问题描述】:

以下行发生内存泄漏

NSURL *imageURL = [NSURL URLWithString:currentElementValue];

NSData *ndata =  [NSData dataWithContentsOfURL:imageURL];

UIImage *image1 = [[UIImage alloc] initWithData:ndata];

请帮帮我。

【问题讨论】:

    标签: objective-c ios memory-leaks nsdata


    【解决方案1】:

    U 可以在函数结束时释放本地创建的对象,如下所示

      NSURL *imageURL = [NSURL URLWithString:currentElementValue];
      NSData *ndata = [NSData dataWithContentsOfURL:imageURL];
      UIImage *image1 = [[UIImage alloc] initWithData:ndata];
      [ndata release];
      [imageURL release];
    

    这样每次分配的对象都会在该范围内释放

    【讨论】:

    • 你正在释放自动释放的对象 ndata,你会崩溃
    • NSDataNSURL 在这个例子中都是自动释放的,不需要清理,因为两者都会导致崩溃。 UIImage 但是应该被释放。
    【解决方案2】:

    看起来像那条线

    UIImage *image1 = [[UIImage alloc] initWithData:ndata];
    

    没有正确清理。将其更改为:

    UIImage *image1 = [[[UIImage alloc] initWithData:ndata] autorelease];
    

    UIImage *image1 = [UIImage imageWithData:ndata];
    

    您的 imageURL (NSURL) 和 ndata (NSData) 是自动释放的,因此这应该可以清除您的错误。

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2011-06-28
      • 2013-03-29
      相关资源
      最近更新 更多