Утечки памяти в цвете UICOLOR по методу RGB - PullRequest
1 голос
/ 16 августа 2010

Мне нужно создать токен строки и получить значения RGB для создания UICOlor, ниже приведен код,

NSString* text = @"1.0,1.0,1.0";
NSArray *chunks = [text componentsSeparatedByString:@","];
return [UIColor colorWithRed:([[chunks objectAtIndex:0] floatValue]/256.0)
                       green:([[chunks objectAtIndex:1] floatValue]/256.0)
                        blue:([[chunks objectAtIndex:2] floatValue]/256.0)
                       alpha:1];

Он показывает утечку памяти в строке, возвращающей объект UIColor, надеюсь, кто-то найдетуказать на ошибку, которую я делаю в коде.


Я нарушаю код, но он все еще показывает мне утечку в строке, где я инициализирую объект UIColor.

Прототипфункция,

+(UIColor*) GetUIColorFromText:(NSString*)text;

В основном я получаю три странные утечки памяти, я не знаю, взаимосвязаны ли эти три или нет.

Ниже строки кода также показывает утечку памяти в инструменте, я запускаю код на IOS 3.12 и 4, но я получаю эти три утечки все время,
[MyBtn.titleLabel setFont:[UIFont boldSystemFontOfSize:12]];

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

См. Принятый ответ на iphone - UIColor течет ... нужно освободить объект?

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

0 голосов
/ 16 августа 2010

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

NSString* text = @"1.0,1.0,1.0";
NSArray *chunks = [text componentsSeparatedByString:@","];
NSString *redStr = [chunks objectAtIndex:0];
float red = [redStr floatValue]/256.0;
NSString *greenStr = [chunks objectAtIndex:1];
float green = [greenStr floatValue]/256.0;
NSString* blueStr = [chunksObjectAtIndex:2];
float blue = [blueStr floatValue]/256.0;

UIColor* rgb = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];

return rgb;

Это должно, по крайней мере, точно определить, где находится заявленная проблема. Однако я почти уверен, что в этом коде нет фактической утечки.

Пара других мыслей:

Это полный размер кода? Предположительно, вы не используете жестко закодированный @"1.0,1.0,1.0" в долгосрочной перспективе, так что поблизости есть что-то еще, что может вызывать проблему?

Как называется метод? Я читал здесь, что статический анализатор учитывает соглашение об именах NARC, пытаясь понять, какой должна быть семантика. Я понятия не имею, насколько это верно, и как это может привести к вашей проблеме, но есть очень маловероятный шанс, что это может способствовать ошибочному предупреждению об утечке.

РЕДАКТИРОВАТЬ: исходя из вашей дополнительной информации, я в растерянности. Все три из этих фрагментов выглядят хорошо для меня. Что вы используете для обнаружения этих утечек - статический анализ или время выполнения? Если последнее, вы работаете на симуляторе или устройстве? Предоставляется ли какая-либо другая информация?

...