Skip navigation.
 
mlRe: Understanding objc_assign_strongCast
FROM : David Elliott
DATE : Thu Feb 07 21:07:37 2008

Hi Chris,

On Feb 7, 2008, at 12:50 PM, Christopher Nebel wrote:

> On Feb 6, 2008, at 5:23 PM, Ben Trumbull wrote:
>

>> objc_assign_strongCast() will issue a write barrier, informing GC 
>> that the destination value has changed.  But if the only references 
>> to this pointer are in unscanned (not GC) memory, than the GC 
>> system will think it's dead as no references to that pointer exist 
>> in scanned (GC live) memory.
>>
>> The C++ new operator allocates from malloc(), just as before. 
>> malloc() memory is not GC scanned.  It's probably easiest to 
>> instead use CFRetain and balance it with CFRelease in delete/etc.

>
> You could also define a custom "new" operator for the class in 
> question that allocates its memory using NSAllocateCollectable(..., 
> NSScannedOption), but that might be more trouble than it's worth.
>


The problem then becomes: what references that object. Because 
obviously if that object doesn't have a strong reference, it will be 
considered finalizable and so will the other objects.

But yes, the thought crossed my mind and I'm sure I will find such a 
technique useful in the future.

-Dave

Related mailsAuthorDate
mlUnderstanding objc_assign_strongCast David Elliott Feb 7, 00:27
mlre: Understanding objc_assign_strongCast Ben Trumbull Feb 7, 02:23
mlRe: Understanding objc_assign_strongCast David Elliott Feb 7, 08:50
mlRe: Understanding objc_assign_strongCast Christopher Nebel Feb 7, 18:50
mlRe: Understanding objc_assign_strongCast David Elliott Feb 7, 21:07
mlRe: Understanding objc_assign_strongCast Ben Trumbull Feb 8, 10:01