Question

Lorsque vous créez un CGLayer comme tant, puis obtenir le contexte ... il semble impossible de libérer le CGContextRef ?

Libérer le CGLayerRef lui-même (apparemment) fonctionne très bien.

Vous penseriez que vous pouvez libérer le CGContextRef juste avant de libérer le CGLayer - mais pas? Et vous ne pouvez libérer le CGContextRef juste après avoir relâché la CGLayer.

Si vous relâchez le CGContextRef, les accidents de l'application.

CGLayerRef aether = CGLayerCreateWithContext(
    UIGraphicsGetCurrentContext(), CGSizeMake(1024,768), NULL);
CGContextRef weird = CGLayerGetContext(aether);

// paths, strokes, filling etc
// paths, strokes, filling etc

// try releasing weird here
CGLayerRelease(aether);
// or, try releasing weird here

Quelqu'un sait-il ce qui se passe ici? (On notera en outre que CGContextRelease est en effet la même chose que CFRelease, avec une vérification nulle.)

En fait si vous ne relâchez manuellement CGContextRef? Est-ce que quelqu'un sait? Vive.

CGContextRelease(weird); // impossible, not necessary, doesn't work???

En ce qui concerne la réponse spectaculaire de Joel ci-dessous:

lance CGLayerRef correcte et appropriée? Joel a en pointe:
"Oui, puisque la fonction que vous l'obtenir à partir a 'Créer' dans sa signature. Voir: documentation / CoreFoundation /"

Était-ce utile?

La solution

Vous ne possédez pas le contexte de retour CGLayerGetContext, et ne devrait donc pas relâcher *. En particulier, voir http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/writerid/cfGetRule pour toute information concernant ' Get » fonctions de base Fondation.

*: au moins, vous ne devriez pas le libérer donné votre code d'exemple. Si vous le retenaient d'abord (CGContextRetain (bizarre)), alors vous devriez avoir un CGContextRelease pour l'équilibrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top