当您像这样创建 CGLayer ,然后获取上下文... 发布CGContextRef 似乎是不可能的?
释放CGLayerRef本身(显然)可以正常工作。
你认为你可以在发布CGLayer之前释放CGContextRef - 但不是吗?在释放CGLayer之后,你也不能释放CGContextRef。
如果您发布了CGContextRef,应用程序崩溃。
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
有谁知道这里发生了什么? (进一步注意,CGContextRelease确实与CFRelease相同,只有一些零检查。)
实际上你应该从不手动发布CGContextRef吗?有人知道吗?欢呼声。
CGContextRelease(weird); // impossible, not necessary, doesn't work???
关于乔尔在下面的精彩回答:
释放 CGLayerRef 是否正确?乔尔指出:
“是的,因为您从中获取的功能在其签名中有'创建'。请参阅:documentation / CoreFoundation /”
答案 0 :(得分:5)
您不拥有从CGLayerGetContext返回的上下文,因此不应该释放它*。特别是,请参阅http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/writerid/cfGetRule以获取有关Core Foundation中“获取”功能的信息。
*:至少,您不应该根据示例代码发布它。如果你先保留它(CGContextRetain(怪异)),那么你应该有一个CGContextRelease来平衡它。