【问题标题】:Objective C: What does allocation 'count' mean (using instruments)目标 C:分配“计数”是什么意思(使用工具)
【发布时间】:2011-09-28 01:59:57
【问题描述】:

我使用 Instruments 运行我的应用程序,发现我的方法之一“[UICustomButton loadButton..]”分配下的计数一直在增加(见下面的屏幕截图)-

每当我滚动表格视图并且单元格可见时,都会触发相关方法。

我的问题是

1) 计数实际上是什么意思?持续增加正常吗?

2) 越来越多的计数是我滚动变得越来越迟钝的原因吗?

【问题讨论】:

    标签: objective-c ios memory-management


    【解决方案1】:

    现在,据我了解计数的概念,我将尝试解释这一点,计数是指您在对象上未完成的所有权声明的数量,可以借助称为 - 的函数进行检查保留计数,但您永远不应该关注保留计数的值,因为它永远不会正确且总是令人困惑,

    您不知道要保留什么、为什么要保留、谁在保留、何时保留等等。

    例如:

    You'd think that [NSNumber numberWithInt:1] would have a retainCount of 1. It doesn't. It's 2.
    You'd think that @"Foo" would have a retainCount of 1. It doesn't. It's 1152921504606846975.
    You'd think that [NSString stringWithString:@"Foo"] would have a retainCount of 1. It doesn't. Again, it's 1152921504606846975.
    

    基本上,因为任何东西都可以保留一个对象(并因此改变它的retainCount),并且由于您没有运行应用程序的大多数代码的源代码,所以一个对象的retainCount 是没有意义的。

    如果您试图找出一个对象没有被释放的原因,请使用 Instruments 中的 Leaks 工具。如果您想找出一个对象被过早释放的原因,请使用 Instruments 中的 Zombies 工具。

    但不要使用 -retainCount。这是一个真正毫无价值的方法。

    【讨论】:

    • 提问者根本没有提到-retainCount。问题是关于 Instruments 中的 Allocations 工具。
    • @Radix,感谢您的回复,所以基本上大数字应该与性能不佳无关?
    • @Zhen: 是的,它们根本没有意义,你可以自己检查,alloc init 一个标签并检查它的保留计数
    • 我不同意。如果你明白发生了什么,retainCount 是非常有意义的。
    • @Radix -- 取决于您所谈论的平台。保留计数在 GCed 环境中毫无意义,但这不是手机上的正常环境。
    【解决方案2】:

    仪器中的计数显示您的应用程序创建的给定类的仍然存在的实例数。因此,增加到您的应用程序创建了它需要拥有的所有对象的程度是正常的,然后它应该或多或少保持不变(或多或少,因为您可能一直在创建和释放对象)。

    如果计数从未停止增加,您可能会泄漏对象 - 创建而不是正确释放。这可能会导致速度变慢(例如,如果您正在创建性能昂贵的对象或必须使用越来越多的所有实例),在您使用更多内存后肯定会导致崩溃使用。

    你在 tableView 中重用了单元格吗?你应该这样做,否则你会得到这样的效果:增加实例数,增加内存使用,缓慢滚动和崩溃。

    【讨论】:

    • Stanczak,感谢您的见解,这也是我的恐惧。奇怪的是,我确实重用了单元格数据,并且由于我在单元格中创建按钮的方式似乎确实出现了问题,如果您不介意,您可以参考我的另一个问题stackoverflow.com/questions/6567799/…,它实际上有代码和截图?感谢您对此的帮助
    • 我想看看你的细胞创建代码。我怀疑您不仅在创建单元格时向单元格添加了一个按钮,而且在每次加载数据时都添加了按钮
    • @bshirley,我的代码可以在我的另一个问题stackoverflow.com/questions/6567799/… 中找到。感谢您是否可以帮助查看并就可以做的事情给我一些建议。提前致谢
    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 2011-04-29
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多