【问题标题】:iPhone Objective-C memory leak issueiPhone Objective-C 内存泄漏问题
【发布时间】:2011-07-29 21:40:40
【问题描述】:

我有一点问题,我创建了一个按钮对象数组并将它们放在一个视图上,比如

for(int i=0;i<_number;i++) { 
    _object = [[object alloc]init];
    [self.view addsubview:_object];
}

但是,如果我在将它们添加到视图后立即释放它们,它们会在用户自然点击它们时中断。我的问题是哪里是释放它们的最佳地点?

该列表会定期重新填充,因此目前我保留对对象的引用,当我需要重新填充时,我通过像这样遍历视图来释放它们

for(_object *obj in self.view) { 
    [obj removeFromSuperview]; 
    [obj release]; 
}

有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 第 1 行代码中的错字?您分配并初始化_object,但将object 添加到视图中。
  • 顺便说一句,您应该能够在将它们添加到视图后立即释放它们。如果它坏了,就会出现其他问题。

标签: iphone objective-c cocoa-touch memory memory-leaks


【解决方案1】:

superview 保留了它的 subview,所以你不需要保留它们。特别是因为您没有对对象本身的引用(即您从 self.view 获取引用),您不应该为它们的内存管理而烦恼。

这里似乎有一些拼写错误,所以我假设您没有发布真正的代码。 (object vs _object)

第一个 for 循环可能如下所示:

for(int i=0;i<_number;i++) {
    _object = [[[Object alloc]init] autorelease];
    [self.view addsubview:_object];
}

第二个:

for( Object *obj in self.view.subviews ) {
    [obj removeFromSuperview];
}

(为了清楚起见,将object 更改为Object

【讨论】:

  • 是的,我错过了那个错字,我只是写了一个简单的例子,因为实际的代码要长一些。不过感谢您的快速响应,我的代码可能在其他地方被破坏了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
相关资源
最近更新 更多