Потенциальная утечка объекта, выделенного для окна индикатора активности - PullRequest
1 голос
/ 17 марта 2011

Я использую класс ActivityIndicatorC в файле делегата приложения и выделяю для него объект, но здесь я получаю утечку памяти,

self.ActIndicator=[[ActivityIndicatorC alloc] initwithWindow:window];

Я выпускаю ActIndicator этот объект в секции dealloc, но пока не получу такую ​​же потенциальную утечкудля вышеуказанного кода.

Любое решение, которое может предложить любой.

Ответы [ 3 ]

3 голосов
/ 17 марта 2011

объект сохраняется дважды. При использовании self.ActIndicator = вы вызываете установщик, который компилятор создал для вас, используя @property(retain,...), который вы вставили в свой интерфейс.

self.ActIndicator=[[ActivityIndicatorC alloc] initwithWindow:window];
    ^ retainCount + 1                  ^^^^^ and +1 because of this.

Вы могли бы написать

self.ActIndicator = [[[ActivityIndicatorC alloc] initwithWindow:window] autorelease];

или

ActIndicator = [[ActivityIndicatorC alloc] initwithWindow:window];

И вам следует изменить имя на actIndicator или (еще лучше) ActivityIndicator. Только имена классов должны начинаться с заглавной буквы.

2 голосов
/ 17 марта 2011

, если ActIndicator установлен для сохранения свойства.затем происходит утечка в файле .h: make @property (nonatominc, retain) переходит в @property (nonatominc, assign) или

ActivityIndicatorC *theActivity= [[ActivityIndicatorC alloc] initwithWindow:window];
self.ActIndicator=theActivity;
[theActivity release];
1 голос
/ 17 марта 2011

Вам придется вручную освобождать объекты, созданные с помощью alloc-init. Поэтому вы должны написать [ActIndicator release]; или просто выпустить его автоматически.

...