Domanda

Quando si crea un CGLayer in questo modo, e quindi ottenere il contesto ... sembra essere impossibile da rilasciare il CGContextRef

Il rilascio del CGLayerRef stessa (apparentemente) funziona bene.

Si potrebbe pensare che si potrebbe rilasciare il CGContextRef poco prima di rilasciare il CGLayer - ma no? Né è possibile rilasciare il CGContextRef subito dopo il rilascio del CGLayer.

Se si rilascia il CGContextRef, l'applicazione si blocca.

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

Qualcuno sa che cosa sta succedendo qui? (Nota inoltre che CGContextRelease è infatti proprio la stessa CFRelease, con qualche controllo nullo.)

In realtà si dovrebbe mai rilasciare manualmente CGContextRef? Qualcuno sa? Cin cin.

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

Per quanto riguarda la risposta spettacolare di Joel di seguito:

sta rilasciando la CGLayerRef corretto e adeguato? Joel ha fuori punte:
"Sì, dal momento che la funzione che stai ottenendo da si e 'Create' nella sua firma Vedi:. La documentazione / CoreFoundation /"

È stato utile?

Soluzione

Non c'è proprio contesto tornato da CGLayerGetContext, e quindi non dovrebbe rilasciarlo *. In particolare, si veda http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/writerid/cfGetRule per informazioni riguardanti ' Get' funzioni core Foundation.

*: almeno, non dovrebbe rilasciare dato il codice di esempio. Se mantenuto il primo (CGContextRetain (strano)), allora si dovrebbe avere un CGContextRelease per bilanciarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top