首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode/Instruments未显示内存泄漏

XCode/Instruments未显示内存泄漏
EN

Stack Overflow用户
提问于 2011-07-22 02:54:25
回答 3查看 3.2K关注 0票数 9

我正在听斯坦福大学的iOS开发讲座,我有一个计算器大脑的课程,它已经在控制器中被alloc init了,但我还没有在deallocreleased它。

代码语言:javascript
复制
- (CalculatorBrain *)brain
{
    if (!brain) 
        brain = [[CalculatorBrain alloc] init];

    return brain;

}

我从XCode -> Run with Performance Tool运行,应用程序启动时没有泄漏,然后我在iOS模拟器中单击主页按钮,但什么也没有,然后双击主页按钮,关闭应用程序,但仍然什么也没有。

我也做了构建和分析,它没有发现任何东西

你能让我知道为什么它不去取吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-24 16:56:38

看起来好像没有检测到泄漏。看这一行:

代码语言:javascript
复制
brain = [[CalculatorBrain alloc] init];

只要brain指向一个对象,该对象就不会被认为是“内存泄漏”。如果你在某一时刻这么做,

代码语言:javascript
复制
brain = nil;

然后泄漏就会被记录下来。释放容器对象也可以做到这一点,但是你确定它正在被释放吗?(例如,当您的程序退出时,它不会被释放。)

问题:泄漏检测器无法检测到所有内存泄漏--这是一个经过数学验证的事实。大多数检测器只检测无法到达的对象,并且许多泄漏检测器特别容易出现假阴性--在C中,很难在运行时区分指针和整数。

编辑:听起来你的应用程序只创建了控制器的一个实例,它只创建了CalculatorBrain的一个实例。如果您考虑内存泄漏的真正含义,您可以将其定义为程序不会释放回操作系统的未使用内存。

  • 当程序运行时,CalculatorBrain总是在使用中,因此它不是泄漏。
  • 当程序退出时,操作系统会自动回收进程使用的所有内存,因此在程序退出后不会有任何内存泄漏。

如果你想创建一个漏洞来看看它是什么样子,你可以在你的程序运行时多次创建一个新的CalculatorBrain,但是忘记释放未使用的版本。在这种情况下,随着程序的运行,会累积越来越多的CalculatorBrain实例。在iOS和其他嵌入式系统上,这通常会使程序崩溃。在现代的64位计算机上,它会逐渐填满可用的交换空间,直到您耗尽交换空间、地址空间或其他一些资源--导致程序崩溃或使系统完全没有响应能力。

标准的做法是不关心释放本应在整个程序运行期间存在的对象。

票数 7
EN

Stack Overflow用户

发布于 2011-07-24 20:52:55

分析器无法找到所有内存泄漏。就它而言,将实例存储到ivar中不会从该方法中泄漏它,然后在dealloc中它不会意识到应该释放ivar。我不记得了(我自己仍然在使用XCode 3),XCode 4可能在这方面有所改进。

至于性能工具,请记住,一个对象不会被认为是泄漏的,直到没有任何东西再持有对它的引用。因此,即使你的控制器没有解除大脑的分配,在控制器解除分配(或接受大脑移植)之前,大脑不会被认为是泄露的。此外,请注意,在*nix类系统上,内存分配会在进程退出时自动清除。因此,如果您为应该在您的进程的生命周期中存在的对象(例如,应用程序委托和它永久持有的任何对象)分配内存,并依赖此行为在进程退出时释放它,那么这并不是真正的泄漏。

票数 0
EN

Stack Overflow用户

发布于 2011-07-24 21:10:31

好吧..。确实,泄漏不能检测到所有的内存泄漏,但假设您正在这样做:

代码语言:javascript
复制
myIvarBrain=[self brain];

如果你将它提供给一个iVar (在你的类的dealloc中释放,没有访问器),实际上根本没有泄漏。返回的RC是1,而且它将是你的类释放后的1。如果您没有在dealloc中释放它,那么您应该等待类的dealloc,以查看内存泄漏。说得通吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6781190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档