2009-11-22 7 views
25

tengo un método que devuelve un CGMutablePathRef, algo como esto:¿Cómo liberar esta CGPath cuando necesito devolverlo

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

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

    return theLine; 
} 

El analizador estático Xcode/Clang advierte que hay una fuga potencial. Los documentos dicen llamar al CGPathRelease(), pero ¿dónde pondría eso?

Si pongo eso antes de que el método regrese, ¿no causará que theLine desaparezca antes de que se devuelva a su llamante?

+0

¿Sigues teniendo problemas con Xcode/Clang para quejarte? –

+0

mismo problema con usted, sigue buscando una respuesta. – Raptor

Respuesta

28

Si un nombre de método comienza con new, sonido metálico se espera que devuelva un objeto con una cuenta de retención de 1. En otras palabras, cambiar el nombre del método de somePath a newSomePath silenciará el Analizador.

Si realmente desea liberar el CGPathRef, podría ser capaz de convertirlo en un NSObject y luego llamar a la liberación automática. Sé que funciona para CFTypes, honestamente no estoy seguro de si CGPathRef califica.

+0

newSomePath hizo el truco! Gracias – willc2

+0

¡Funcionó para mí también! Muchas gracias. –

+0

Lástima que esto no funcione con las funciones C que devuelven objetos CG. :( – Pascal

8

¿Qué hay de la creación de un mutablepath, pasarla a la función de su edificio, a continuación, utilizando y liberándolo:

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