【问题标题】:Remove Object From SuperView but Memory still allocated? (ARC)从 SuperView 中删除对象但仍分配内存? (弧)
【发布时间】:2012-08-31 17:34:14
【问题描述】:

我的应用程序的内存管理存在一些问题。我分配了一个 NSView 类并将其放在我的一个 Windows 上。一段时间后,我从超级视图中删除了该对象,然后将另一个对象放在它的位置。我遇到的问题是当我删除它时没有释放内存。它继续保持与以前一样多的内存,如果我添加更多该类,它会继续堆积在内存中。我的问题是,即使在对象被删除之后,删除该对象是否会删除该类所持有的所有对象,或者是否保留了一些指针?如果需要,我可以发布代码。

谢谢!

编辑: 这是我用来分配它的代码

MyClass *theClass1 = [[MyClass alloc] initWithFrame:frameRect];
[self.window.contentView addSubview:theClass1];

这是我用来释放它的代码

[[self.window.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

我在计时器上创建它,每分钟更新一次。我没有在其他任何地方引用它。

【问题讨论】:

  • 你能分享你声明、创建、添加和删除子视图的代码吗?你在其他地方引用它吗?

标签: objective-c macos automatic-ref-counting


【解决方案1】:

每个对象的内存应该为类的每个实例单独处理。删除一个实例不应影响其他实例的分配(除非您有一些自定义代码来查找该类的其他实例)。

至于 NSView 的删除,removeFromSuperview 确实释放了接收者(视图被删除),这就是为什么 NSView 上的 Apple 文档告诉 retain 如果以后仍然需要它。

在声明、实例化、添加、然后删除的位置发布代码将有助于获得更具体的答案。

【讨论】:

  • 属于该类实例的对象呢?如果我摆脱视图,该视图上的对象是否仍驻留在内存中?
  • 好问题。根据定义,当一个对象被释放时,它的属性也会被释放,除非你在别处保留了它们。
猜你喜欢
  • 1970-01-01
  • 2017-05-13
  • 2010-12-19
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2011-07-04
相关资源
最近更新 更多