【问题标题】:iPhone app memory leakiPhone应用程序内存泄漏
【发布时间】:2010-06-14 19:17:48
【问题描述】:

知道为什么这段代码会导致内存泄漏吗?如您所见,我想尽办法阻止它。

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    NSArray *allSketches = [project.sketches allObjects];
    NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches];

    if(sketchesArray != nil) [sketchesArray release];

    [self setSketchesArray:temp];

    [allSketches release];
    allSketches = nil;
    [temp release];
    temp = nil;

}

我还在 viewDidDissapear 中发布了sketchesArray。我没有使用 viewDidLoad 和 dealloc 来初始化/释放这些对象,因为我正在做的事情需要我使用 viewWillAppear 和 viewDidDissapear。

谢谢

【问题讨论】:

    标签: iphone nsmutablearray memory-leaks


    【解决方案1】:

    改用这个来修复它:

    NSArray *allSketches = [project.sketches allObjects];
    NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches];
    
    [self setSketchesArray:temp];
    
    [temp release];
    

    虽然我记得这样做过,但以前没有用...奇怪...不过,CoreGraphics 似乎仍然存在一些内存泄漏。这正常吗?

    【讨论】:

      【解决方案2】:

      当你完成它时,它会在其他地方发布吗?

      [self setSketchesArray:temp];
      

      具体来说,你在这个函数中释放了sketchesArray,但是当你完成视图之后你会在其他地方这样做吗?

      【讨论】:

      • 是的,它在 dealloc 中发布。顺便说一句,它现在可以工作了。见上文:)
      【解决方案3】:

      我看不到泄漏,但你有几个可能的过度发布。

      nil sketchesArray 的发布应在setSketchesArray 内部进行管理。而且看起来您也没有 allSketches 的本地所有权...

      【讨论】:

      • 你是对的,谢谢。我对此很陌生,仍然不习惯内存管理系统。
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多