On Dec 24, 2009, at 12:47 AM, Ken Thomases wrote:
> On Dec 24, 2009, at 2:23 AM, John Engelhart wrote:
>>
>> Wait, what? I could understand that under GC -retain might be nothing more
>> than the equivalent of "- (id)retain { return(self); }", but -retainCount?
>> Is it really "- (NSUInteger)retainCount { return((NSUInteger)self); }" ?
>> Wouldn't it make more sense to just return 1, or maybe something like
>> NSUIntegerMax?
>
> There is no implementation of -retainCount under GC. There's a short-circuit
> in obj_msgSend that detects the selector for the memory management methods
> which are no-ops. Since -retain and -autorelease have to return self, that's
> what the short-circuit does. -retainCount gets the same treatment and so the
> same return value. The return value doesn't matter, anyway. (Frankly, it
> hardly matters under managed memory, either.)
More precisely, there's exactly one short-circuit check and thus only one
selector value. Under GC, @selector(retain) == @selector(release) ==
@selector(autorelease) == @selector(dealloc) == @selector(retainCount).
Happily, `return self` works to implement all of those.
Don't write any code that relies on those selectors being equal, though. It
will change in the future.
--
Greg Parker [email protected] Runtime Wrangler
_______________________________________________
Cocoa-dev mailing list ([email protected])
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 [email protected]