Вы не говорите, какие объекты были обнаружены как утечка, но если они StorePin
s, то это проблема MapKit - ваш код управления памятью для StorePin
s, который вы создаете в цикле, просто в порядке.
Одна вещь, которую вы делаете, что может вызывать проблемы MapKit, это передача представлению карты ссылки на свой собственный ивар, который вы хотите изменить.Это не кажется слишком вероятным - если бы это была действительно проблема, это, вероятно, вызвало бы сбой, а не утечку.Тем не менее, вы можете попытаться сделать копию, либо мелкую (как Кай писал ранее, но абсолютно делайте не следуйте советам по использованию сохранения количества и вызову release
в цикле):
NSArray * annotationsCopy = [NSArray arrayWithArray:mapView.annotations];
или глубокий:
NSArray * annotationsDeepCopy = [[[NSArray alloc] initWithArray:mapView.annotations
copyItems:YES]
autorelease];
, затем передайте копию в removeAnnotations:
.
Второй вариант создает автоматически выпущенный массив с копией каждого элемента всписок аннотаций, чтобы представление карты не пыталось удалить те же экземпляры, что итерируется.Очевидно, что это использует в два раза больше памяти;Вы, вероятно, хотите беспокоиться об этом только для поиска ошибок.
Если это исправит утечку, отлично, если нет, то, вероятно, вы ничего не можете с этим поделать.