On Jul 16, 2009, at 7:24 AM, Wilson Chen wrote:

Hi all,

I'm new to the Cocoa framework, and puzzled why the following code would
work:

CGLayerRef layer = ...assume we have a layer created.
printf("Retain count after creation: %i\n", CFGetRetainCount(layer));

[(NSObject*)layer retain];
printf("Retain count after sending a retain message: %i\n",
CFGetRetainCount(layer));

[(NSObject*)layer release];
printf("Retain count after sending a release message: %i\n",
CFGetRetainCount(layer));

The code above gives the following output:

Retain count after creation: 1
Retain count after sending a retain message: 2
Retain count after sending a release message: 1

Since a CGLayer is not a subclass of NSObject, its instances shouldn't
respond to retain/release messages. Yet the code works.

This code works in a non-garbage collected environment. In a garbage collected environment, the Objective-C retain and release calls would be ignored while CFRetain and CFRelease would not. Your best bet is to not mix the two paradigms.



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to