2009-11-22 13 views
25

Mam metodę, która zwraca CGMutablePathRef, coś jak to:Jak mogę zwolnić tego CGPath kiedy muszę go zwrócić

- (CGMutablePathRef)somePath; 
{ 
    CGMutablePathRef theLine = CGPathCreateMutable(); 

    CGPathMoveToPoint(theLine, NULL, 50, 50); 
    CGPathAddLineToPoint(theLine, NULL, 160, 480); 
    CGPathAddLineToPoint(theLine, NULL, 270, 50); 

    return theLine; 
} 

Xcode/Clang statyczny analizator ostrzega, że ​​istnieje potencjalny wyciek. Dokumenty mówią, aby zadzwonić pod numer CGPathRelease(), ale gdzie mam to umieścić?

Jeśli wstawię to przed zwróceniem metody, czy to nie spowoduje, że theLine zniknie, zanim zostanie zwrócone do rozmówcy?

+0

Czy nadal masz problemy z reklamacją Xcode/Clang? –

+0

ten sam problem z tobą, wciąż szuka odpowiedzi. – Raptor

Odpowiedz

28

Jeśli nazwa metody rozpoczyna się new, dzyń będzie oczekiwać, aby powrócić do obiektu o liczbie utrzymania 1. Innymi słowy, zmiana nazwy metody z somePath na newSomePath spowoduje wyciszenie analizatora.

Jeśli rzeczywiście chcesz autorelease CGPathRef, możesz być w stanie rzucić go do NSObject, a następnie zadzwonić autorelease. Wiem, że działa dla CFTypes, nie jestem naprawdę pewny, czy CGPathRef kwalifikuje.

+0

newSomePath załatwił sprawę! Dzięki – willc2

+0

Pracował również dla mnie! Dziękuję Ci bardzo. –

+0

Szkoda, że ​​to nie działa z funkcjami C, które zwracają obiekty CG. :( – Pascal

8

Jak o tworzeniu mutablepath, przekazując go do funkcji budynku, a następnie przy użyciu i zwalniając go:

CGMutablePathRef mPath = CGPathCreateMutable(); 
[buildPath:mPath]; //adds reusable lines etc 
...do something with it... 
CGPathRelease(mPath);