2009-11-22 10 views
25

Ho un metodo che restituisce un CGMutablePathRef, qualcosa di simile:Come faccio la rilascio CGPath quando ho bisogno di restituirlo

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

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

    return theLine; 
} 

L'analizzatore statico Xcode/Clang avverte che c'è una perdita potenziale. I documenti dicono di chiamare CGPathRelease() ma dove lo metterei?

Se lo metto prima che il metodo ritorni non causerà lo scomparire theLine prima che venga restituito al suo chiamante?

+0

Hai ancora problemi con Xcode/Clang lamentarti? –

+0

stesso problema con te, ancora in cerca di risposta. – Raptor

risposta

28

Se un nome di metodo inizia con new, clang si aspetta che per restituire un oggetto con un conteggio trattenere di 1. In altre parole, la ridenominazione del metodo da somePath a newSomePath interromperà l'analizzatore.

Se si desidera effettivamente autorizzare la CGPathRef, è possibile che sia in grado di eseguire il cast su un NSObject e quindi chiamare autorelease. So che funziona per CFTypes, onestamente non sono sicuro se CGPathRef si qualifica.

+0

newSomePath ha fatto il trucco! Grazie – willc2

+0

Ha lavorato anche per me! Grazie mille. –

+0

Peccato che ciò non funzioni con le funzioni C che restituiscono oggetti CG. :( – Pascal

8

ne dite di creare un mutablepath, passando alla funzione dell'edificio, quindi utilizzando e rilasciandola:

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