You don't "own" the Core Foundation objects startColor
, endColor
because they were
not returned by a function that has "Create" or "Copy" in its name (compare "The Create Rule" in the "Memory Management Programming Guide for Core Foundation".
And because you don't own the objects, you must not "transfer the ownership" to ARC with
CFBridgingRelease()
. So
[NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];
is correct. And
CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations);
is also correct because
CGGradientCreateWithColors(colorSpace, (CFArrayRef)CFBridgingRetain(colors), locations);
would pass a (+1) retained array to CGGradientCreateWithColors()
. This would be a memory
leak because that function does not release the colors
argument.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…