/ / Suppress XCode Analyzer Potencjalny wyciek obiektu zapisanego w ... błędzie [duplikat] - obiektyw-c, xcode, analizator

Suppress XCode Analyzer Potencjalny wyciek obiektu zapisany do .. błąd [duplikat] - cel-c, kod xcode, analizator

Mam metodę, która tworzy zwraca wystąpienie CoreGraphics obiekt - CGPathRef.

Kiedy uruchamiam aplikację przez Analyzer, narzeka, że ​​ta metoda przecieka ... tak, ale jest to zamierzone. Chcę przenieść własność na dzwoniącego i pozwolić mu posprzątać.

Co mogę zrobić, aby to stłumić Analizator ostrzeżenie?

- (CGPathRef) createSomePath:(CGPoint)center innerRadius:(CGFloat)innerRadius outerRadius:(CGFloat)outerRadius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle
{
CGMutablePathRef slicePath = CGPathCreateMutable();

....

return slicePath;  <--- Analyzer points to this line as a potential leak.
}

Załóżmy, że powinno to być możliwe, ponieważ wiele frameworków zwraca te obiekty, które wymagają od wywołującego oczyszczenia ...

Z góry dziękuję !

P.S.Obawiam się, że to pytanie nie jest dupkiem ani nigdzie indziej nie ma właściwej odpowiedzi ... 3 odpowiedzi podświetlone na górze tej strony nie są poprawne / kompletne ... tylko odpowiedź podana tutaj przez Matthiasa Baucha, tj. "Nowa „reguła jest naprawdę właściwą odpowiedzią na zadane przeze mnie pytanie :) DZIĘKI!

Odpowiedzi:

9 dla odpowiedzi № 1

Funkcje CoreFoundation są zgodne z "Stwórz zasadę". Jeśli funkcja zawiera „Utwórz”, zwraca obiekt z liczbą odwołań równą 1.

Niestety twoja metoda nie jest funkcją c.

Więc powinieneś zmienić swoją metodę Objective-C w funkcję C. Coś takiego:

CGPathRef CreatePath(CGPoint center, CGFloat innerRadius, CGFloat outerRadius, CGFloat startAngle, CGFloat endAngle) {
// your code here
}

Powinno to zadowolić analizator i działać poprawnie z ARC.

W metodzie Objective-C można uzyskać podobne zachowanie, uruchamiając sygnaturę metody za pomocą new, alloc, copy lub mutableCopy. Rozpoczynanie metody od new prawdopodobnie najlepiej pasuje do Twojego przypadku.
Coś takiego powinno zadowolić analizator, ale nie jestem pewien, czy działa poprawnie z ARC. Musisz to profilować.

- (CGPathRef)newPath:(CGPoint)center innerRadius:(CGFloat)innerRadius outerRadius:(CGFloat)outerRadius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle {
// your code here
}

0 dla odpowiedzi nr 2

Powinieneś być w stanie to zrobić:

#ifndef __clang_analyzer__
CGMutablePathRef slicePath = CGPathCreateMutable();
#endif

Nie mogę powiedzieć, że polecam to!