UIColor -initWithRed: зеленый: синий: альфа: утечка памяти? - PullRequest
2 голосов
/ 06 ноября 2011

У меня такая ситуация:

UIColor *color = [[UIColor alloc] initWithRed:0/255.f green:156/255.f blue:255/255.f alpha:1];
self.lightBlue = color;
color = nil;
[color release];

И получение утечки памятки в UIColor * color = [[UIColor alloc] initWithRed: 0 / 255.f зеленый: 156 / 255.f синий: 255/255.f alpha: 1];

Ситуация с инструментами: instruments situation

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2011

Вы устанавливаете локальную переменную 'color' в nil, а затем делаете [nil release], который ничего не делает.

Если вам действительно нужен 'color = nil', вы должны сделать это после релиза.

1 голос
/ 06 ноября 2011

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

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

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

Суть в том, что если приведенный выше код - это все, что вы делаете, color определенно не протекает. Если вы удерживаете этот объект где-либо еще, не отпуская его, он протекает.

Никогда не отпускайте объект, который вы не помните, сохраняя. КОГДА-ЛИБО. Но я подозреваю, что вы просто его где-то храните и даже не замечаете.

...