2010-05-12 2 views
3

Je développe pour iphone. Je veux créer un chemin mutable via CGPathCreateMutable(), et je veux le renvoyer hors de la fonction qui le crée. Je suis supposé appeler un CGPathRelease() quand j'en ai fini avec lui. Mais puisque je le retourne, je souhaite le libérer. Puisque le chemin de Quartz est un code C (et ne ressemble pas à un objet C objectif), est-il correct que je ne puisse pas appeler autorelease dessus?Autorelease pour CGMutablePathRef?

Editer: Pour d'autres qui tombent sur cette question, le conseil ci-dessous est pour les fonctions C retournant des objets de base de base seulement. Pour les méthodes de l'objectif C retournant les objets de base de base, voir Ownership regarding to returned Quartz objects

Répondre

5

Correct. Les pools Autorelease existent dans la couche Foundation et au-dessus (AppKit/UIKit, etc.). Ils n'existent pas pour les objets CoreFoundation/CoreGraphics.

Le moyen le plus simple est de renommer votre fonction. Si votre fonction est actuellement nommé:

CGMutablePathRef myAwesomePath(params...); 

Ensuite, vous devez renommer à:

CGMutablePathRef createMyAwesomePath(params...); 

de sorte que vous êtes sûr de retourner un objet avec un +1 conserver le nombre en suivant la Create rule.

+0

Par 'CHMutablePathRef' voulez-vous dire' CGMutablePathRef'? – kennytm

+0

@KennyTM whoops! Fixé. –

+0

Mais pouvez-vous le libérer automatiquement en le convertissant en NSObject? – Adam

Questions connexes