Цель C: Что означает распределение «считать» (с использованием инструментов) - PullRequest
5 голосов
/ 04 июля 2011

Я запустил свое приложение, используя инструменты, и обнаружил, что один из моих методов [UICustomButton loadButton ..] "при выделении всегда увеличивается (см. Скриншот ниже) -

enter image description here

Рассматриваемый метод запускается всякий раз, когда я прокручиваю табличное представление и когда ячейка видна.

Мои вопросы

1) Что на самом деле означает счет?увеличение?

2) Является ли увеличение счета причиной того, что моя прокрутка становится все более медленной?

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

Количество в инструментах показывает количество экземпляров данного класса, созданного вашим приложением, которые все еще живы. Поэтому нормально увеличиваться до того момента, когда ваше приложение создало все необходимые ему объекты, тогда оно должно оставаться более или менее постоянным (более или менее, потому что вы, вероятно, будете создавать и отпускать объекты все время).

Если количество никогда не перестает увеличиваться, вы, вероятно, пропускаете объекты - создавайте и не выпускайте должным образом. Это может привести к замедлению (если вы создаете дорогостоящие объекты или вам приходится работать со всеми экземплярами, которые, например, получают все больше и больше), это определенно приведет к сбою после того, как вы использовали больше памяти, что разрешено вашему приложению использовать.

Вы повторно использовали ячейки в tableView? В противном случае вы получите именно этот эффект: увеличение количества экземпляров, увеличение использования памяти, медленная прокрутка и сбой по прошествии времени.

0 голосов
/ 04 июля 2011

Теперь, насколько я понял концепцию подсчета, я попытаюсь объяснить это, подсчет относится к числу претензий на владение, которые вы выделили для объекта, и может быть проверен с помощью функции, называемой - retainCount, но вы никогда не должны обращать никакого внимания на значение счетчика хранения, поскольку оно никогда не является правильным и всегда сбивает с толку,

вы не знаете, что хранится, почему оно сохраняется, кто его хранит, когда оно было сохранено и т. Д.

Например:

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 не имеет смысла.

Если вы пытаетесь выяснить, почему объект не освобождается, используйте инструмент «Утечки» в инструментах. Если вы пытаетесь выяснить, почему объект был освобожден слишком рано, используйте инструмент Зомби в Инструментах.

Но не используйте -retainCount. Это действительно бесполезный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...