Piszę funkcję, taką jak poniżej, aby utworzyć CGPath:
+(CGPathRef)CGPathCreateRoundrect:(CGRect)rect radius:(CGFloat)radius {
CGMutablePathRef path = CGPathCreateMutable();
......
CGPathCloseSubpath(path);
return path;
}
Analizator mówi, że pierwsza linia kodu tworzy plikobiekt, który potencjalnie wyciekł. Ale chcę utworzyć nowy obiekt w tej funkcji i przenieść własność na dzwoniącego. Nazwa funkcji zawiera słowo kluczowe „Utwórz”. Czy to błąd „Analizatora”?
Odpowiedzi:
-1 dla odpowiedzi nr 1Dzieje się tak, ponieważ zgodnie z interpretacją kompilatora plik +()
metoda zawsze zwróci zmienną autoreleased, której nie ma w twoim przypadku.
3 dla odpowiedzi № 2
Analizator działa tutaj poprawnie. Własność jest przenoszona tylko za pomocą nazwanych metod copy
, init
lub jego odmianą.
Zwrócony obiekt powinien być autoreleased.