UIColor проблема утечки памяти - PullRequest
1 голос
/ 05 мая 2011

Я пытался решить эту проблему. В основном я использую удобную функцию RIC UIColor, чтобы вернуть UIColor, чтобы подкрасить мой UINavigationBar, UIToolbar и другие объекты. Тем не менее, по какой-то причине в Instruments все время говорят, что у меня утечка памяти при каждой загрузке UIView. Любая помощь будет оценена. Я упростил код здесь для ясности. Вот моя функция (функция имеет переменные RGB и Alpha), которая находится в глобальном одноэлементном классе:

- (UIColor *)returnSelectedColor{
    return [UIColor colorWithRed:(100)/255.0 green:(100)/255.0 blue:(100)/255.0 alpha:(1.0)];
}

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

Первый подход был просто установить оттенок, когда вид выглядит так:

self.navigationController.navigationBar.tintColor=[[GlobalData sharedGlobalData] returnSelectedNavigationColor];

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

    if(self.navigationToolbarColor!=nil){
        [self.navigationToolbarColor release];
    }
    self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain];

self.navigationController.navigationBar.tintColor=self.navigationToolbarColor;

Кто-нибудь имеет представление о том, что может быть проблема? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Проблема здесь в том, что вы, скорее всего, имеете navigationToolbarColor в качестве сохраняемого свойства, поэтому вы чрезмерно сохраняете в этой строке:

self.navigationToolbarColor=[[[GlobalData sharedGlobalData] returnSelectedNavigationColor] retain];

Избавься от звонка туда retain и у тебя все будет хорошо.

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

Статическое решение определенно НЕ то, что вы хотите сделать. Таким образом вы исправляете ложную положительную проблему с РЕАЛЬНОЙ проблемой. См. Решение для iphone - UIColor течет ... нужно освободить объект?

Только не беспокойтесь о "утечке", и все в порядке.

0 голосов
/ 14 мая 2011

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

Вот файл CustomColors.h

#define RGBCOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]

@interface UIColor (CustomColors)

+ (UIColor *)standardColor:(int)selectedAlpha;

@end

Вот файл CustomColors.m

#import "CustomColors.h"

@implementation UIColor (CustomColors)

    + (UIColor *)standardColor{
        static UIColor *customColor = nil;

        if (!customColor){
            customColor = RGBCOLOR(135,153,188,1.0);
            [customColor retain];
        }
        return customColor;
    }

Затем, после включения #import "CustomColors.h" во все мои представления, я могу назначить свои цвета следующим образом:

self.navigationController.navigationBar.tintColor=[UIColor standardColor];

@ end

И это все.Теперь вы можете наслаждаться UIColors без утечек памяти.

...