2011-08-25 13 views
5

Mam metodę, która zwraca CGPath i generuje ostrzeżenia analizatora. Metoda jest zadeklarowana w protokole. Oto przykład implementacja że generuje ostrzeżenie:Jak powinienem unikać ostrzeżenia o tej pamięci?

„Potencjalny przeciek obiektu przeznaczono na linii 47 i przechowywane w«ścieżce»”:

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key; 
{ 
    if ([key isEqualToString:OvalColumn]) 
    { 
     CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL); 
     return path; 
    } 

    return NULL; 
} 

tutaj jest przykład użycia czyli generowanie ostrzeżeń, „Niepoprawna ubytek liczenia odniesienia obiektu, który nie jest własnością w tym momencie przez dzwoniącego”

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey]; 

// Use the path to do some drawing 

CGRelease(path); 

Moja zarządzanie pamięcią jest correc t; Przekazuję zatrzymaną CGPath z mojej metody protokołu i zwalniam ją w bloku wywołującym, więc wiem, że ostrzeżenia mogą zostać zignorowane, ale chciałbym je całkowicie usunąć.

Czy brakuje mi konwencji nazewnictwa, która sprawi, że analizator będzie zadowolony? Czy można definiować funkcje w protokołach? Jak działa podklasa?

+1

Czy zdajesz sobie sprawę z tego, co słychać w ostrzeżeniu? –

+0

Moje przeprosiny. Zaktualizowano. – kubi

+0

Co się stanie, jeśli zmienisz nazwę metody na pathForBounds: key: ?? –

Odpowiedz

5

- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key

szczegółowa notatka na ten temat można znaleźć here

alternatywnie, można zdecydowały się użyć atrybutu cf_returns_retained, ale najlepiej (IMO) do faworyzowania konwencje nazewnictwa.

+0

Piękny. Tak oczywiste z perspektywy czasu. – kubi

+0

Nie wiem, dlaczego został odrzucony. To jest absolutnie właściwa odpowiedź. Analizator pracuje nad konwencjami nazewnictwa metod. Zmiana nazwy na "newPathForBounds" informuje analizator (i każdego programistę używającego go) dokładnie o tym, co robi ta metoda - i że powinieneś oczekiwać, że zatrzymany obiekt zostanie wypluty z drugiego końca. – Steve

+0

Po prostu założyłem, że metody zwracania przedmiotów Fundacji muszą być zgodne z konwencjami nazewnictwa Fundacji. Nie wiem też, dlaczego ten głos został odrzucony. – kubi

Powiązane problemy