On Apr 17, 2010, at 9:53 AM, Uli Kusterer wrote:

> On 17.04.10 16:47, Ken Thomases wrote:
>> On Apr 17, 2010, at 9:37 AM, Paul Sanders wrote:
>>>> That is, retain counts are stored outside of the instance.
>>> In that case there is a danger that a pointer to whatever is referenced 
>>> would be transferred to the copy of the object, which is not what you want.
>> 
>> No, you misunderstand.  There is (in the scheme I'm vaguely recalling) 
>> _nothing_ inside the instances which holds or points to something which 
>> holds the retain count.
>> 
>> There is another data structure entirely which maps from object addresses to 
>> a retain count.
> 
> The question is: Is it documented as a fact you can rely on that this is the 
> case?

No, it's not, and I qualified it as unreliable.  We're on a bit of a tangent 
that was merely inspired by the original question.

> Tracking down subtle memory bugs caused by Apple deciding to move the 
> reference count into an NSObject instance variable after all doesn't sound 
> like a fun occupation.

Well, given what is documented, it seems unlikely that Apple could move it into 
an instance variable.  In particular, there are frequent mentions in the 
documentation that +[NSObject allocWithZone:] sets the 'isa' ivar and zeros out 
all other instance variables.  I suppose a retain count could be implemented in 
an instance variable such that the stored value is the logical value minus one, 
but it seems improbable.

<... a bit of Googling ...>

This 
<http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html>
 describes the isa pointer as "the NSObject class's sole public instance 
variable", although the qualifier "public" in there leaves wiggle room.  It 
also describes the retain count as "a kind of hidden instance variable managed 
by the runtime".

Ah-ha!  Maybe.  This 
<http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html>
 says "The NSObject class declares just one instance variable, isa, of type 
Class."  Although that may be just an example of the result of 
@encode(NSObject) rather than a definitive statement.

Anyway, a fun diversion, but, yes, I'd avoid writing production code based on 
these assumptions.

Cheers,
Ken

_______________________________________________

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