【问题标题】:iPhone: Interface Builder leaks memory?iPhone:Interface Builder 泄漏内存?
【发布时间】:2010-04-28 14:32:14
【问题描述】:

我一直在从事一个 iPhone 项目,在该项目中,我们以编程方式在代码中创建了所有用户界面。现在我要开始一个新的 iPhone 项目并考虑使用 Interface Builder,因为它被推荐给我作为一个非常有用的工具,它比用代码编写所有东西更容易让人头疼,而且通常更快(关于开发时间)。

但是,由于之前使用 Interface Builder 的问题以及由此导致的内存泄漏,我的团队成员有些担忧。因此,他们建议再次用代码构建所有内容。我不知道这些担忧从何而来,但也许比我们更有经验的人可以就该主题提供一些见解。

做一个简单的Google search 并不能真正提供任何信息证明接口生成器本身造成的内存泄漏存在任何问题。

通过查看来自 Apple 的 official documentation,我只看到了我必须注意的这三件事:

@property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;

"然后你应该要么合成相应的访问器方法,要么根据声明实现它们,并(在 iPhone OS 中)在 dealloc 中释放相应的变量。"

- (void)viewDidUnload {
    self.anOutlet = nil;
    [super viewDidUnload];
}

我错过了什么?

【问题讨论】:

    标签: iphone memory-leaks interface-builder


    【解决方案1】:

    当您通过 Interface Builder 分配 IBOutlet 时,该对象默认由控制器保留(即使没有显式设置带有保留的属性)。因此,您需要释放所有 outlet,或者使用 assign 设置属性。

    这是大多数人都会遇到的问题,并导致最常见的内存泄漏。尤其是在反复显示和删除的视图上。

    【讨论】:

    • 谢谢马克。这也是我在 Apple 官方文档中发现的内容(请参阅上面我编辑的问题)。您是否对 Interface Builder 本身造成的内存泄漏有任何不好的经历。这意味着工具有问题而不是我的代码有问题?
    • 我从未见过任何工具本身,没有。我遇到的每一次内存泄漏都是我自己的错误造成的。
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    • 2011-03-22
    相关资源
    最近更新 更多