Инициализация MKMapView начинается с сохранения счета 2 - PullRequest
0 голосов
/ 21 апреля 2011

Я добавил MKMapView в свое приложение, но когда я размещаю карту в памяти, она начинается с счетчика сохранения 2 (я использую iOS 4.0 в качестве базового SDK)

MKMapView *x = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 370)];

NSLog(@"map retain count: %i", [x retainCount]);

[self addSubview:x];


NSLog(@"map retain count: %i", [x retainCount]);

[x release];


NSLog(@"map retain count: %i", [x retainCount]);

[x removeFromSuperview];


NSLog(@"map retain count: %i", [x retainCount]);

Выходные данные показывают этот результат

2011-04-21 14:09:06.159 xx[7373:207] map retain count: 2
2011-04-21 14:09:06.159 xx[7373:207] map retain count: 3
2011-04-21 14:09:06.159 xx[7373:207] map retain count: 2
2011-04-21 14:09:06.160 xx[7373:207] map retain count: 1

В последнем журнале счет сохранения должен быть равен 0, верно?Или он использует предопределенный объект, который API уже создал?

Ответы [ 4 ]

4 голосов
/ 21 апреля 2011

Вы не должны полагаться на retainCount, поскольку существует возможность сохранения созданного вами объекта iOS,

Читайте ниже, что Apple говорит о retainCount.

Важно: Этот метод обычно не имеет значения при отладке проблем управления памятью. Поскольку любое количество объектов каркаса могло сохранить объект для хранения ссылок на него, в то время как пулы автоматического выпуска могут содержать любое количество отложенных выпусков для объекта, маловероятно, что вы можете получить полезную информацию из этого способ.

Чтобы понять основные правила управления памятью, которые вы должны соблюдать, прочитайте «Правила управления памятью» . Для диагностики проблем управления памятью используйте подходящий инструмент:

Статический анализатор LLVM/Clang обычно может обнаруживать проблемы с управлением памятью даже до запуска вашей программы.

Инструмент Object Alloc в приложении Instruments (см. Руководство пользователя Instruments) может отслеживать распределение и уничтожение объектов.

Shark (см. Руководство пользователя Shark) также профилирует распределение памяти (среди множества других аспектов вашей программы).

0 голосов
/ 21 апреля 2011

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

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

0 голосов
/ 21 апреля 2011

Если бы вы не посмотрели на retainCount, пытаясь научиться управлению памятью, это принесло бы вам пользу.Справка Apple по Управление памятью поможет вам. Не беспокойтесь о том, что такое retainCount;просто убедитесь, что вы отпускаете объекты, которыми вы владеете, и не выпускаете объекты, которые вам не принадлежат.Просьба взглянуть на Объект собственности

0 голосов
/ 21 апреля 2011

Не смотрите на удержание, вы просто запутаетесь. Придерживайтесь следующих правил управления памятью и делайте вид, что количество записей не существует.

Инструменты говорят, что это протекает?

...