iPhone - substringToIndex / substringFromIndex / substringWithRange утечка памяти - PullRequest
0 голосов
/ 17 октября 2010

Утечки инструментов говорят о том, что этот код просачивается:

NSString *name = [file substringToIndex:i];
Layer *actualLayer = nil;
for (Layer *lay in layers) {
    if ([lay.layerName isEqual:name]) {
        actualLayer = lay;
    }
}

name - объект утечки.Есть некоторые странные вещи: он только иногда пропускает, но не всегда (этот фрагмент кода выполняется сотни раз во время обычного выполнения моего приложения, но пропускается всего 3-4 раза).Другая странная вещь заключается в том, что я предполагаю, что объект name является автоматически высвобождаемым объектом, и он никогда не будет сохранен или освобожден из-за явного хранения, поэтому как могло случиться, что он утек?от substringToIndex, так что проблема, я думаю, заключается в методе substringToIndex.

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Утечки иногда сообщают о ложных срабатываниях.Код, который вы разместили, выглядит хорошо, поэтому проверьте, может ли окружающий код вызывать проблему.В частности, используйте Build & Analyze, который может выявить много ошибок управления памятью.Если вы не можете найти проблему, есть вероятность, что она не существует (в данном конкретном случае, используя этот конкретный инструмент).

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

0 голосов
/ 17 октября 2010

Хотя код, который вы указали выше, не показывает утечки, если утечки говорят о том, что утечка произошла в этой строке:

actualLayer = lay;

Затем посмотрите в любом месте, где назначается фактический слой, сохраняется, копируетсяи т. д. Утечки - это не волшебство, «именно здесь вам нужно что-то исправить» в 99% случаев.Более того, «именно здесь я обнаружил, что вы протекли, помните, утечка произошла где-то до этого момента».

...