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]

Reply via email to