Wenn Sie erstellen eine CGLayer wie so, und bekommt dann den Kontext ... es scheint die CGContextRef zu Release unmöglich zu sein?Es kann keine CGContextRef (im Kontext von einem CGLayer ist) freizugeben
Freigeben der CGLayerRef selbst (anscheinend) funktioniert gut.
Sie würden denken, Sie könnten den CGContextRef freigeben, kurz bevor Sie den CGLayer freigeben - aber nein? Sie können den CGContextRef auch nicht unmittelbar nach dem Release des CGLayers freigeben.
Wenn Sie den CGContextRef freigeben, stürzt die App ab.
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
Weiß jemand, was hier vor sich geht? (Beachten Sie außerdem, dass CGContextRelease in der Tat genau das gleiche wie CFRelease ist, mit einigen Nulüberprüfungen.)
Eigentlich sollten Sie CGContextRef nie manuell freigeben? Weiß jemand? Prost.
CGContextRelease(weird); // impossible, not necessary, doesn't work???
spektakuläre Antwort der Bezug Joel unter:
ist die Freigabe der CGLayerRef richtig und angemessen? Joel hat darauf hingewiesen:
„Ja, da die Funktion, die Sie es sind zu erhalten von in ihrer Unterschrift auf‚Erstellen‘. Siehe: Dokumentation/Corefoundation /“
Ja, da die Funktion, von der Sie sie erhalten, 'Create' in ihrer Signatur hat. Siehe http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/writerid/cfCreateRule –