re: Understanding objc_assign_strongCast
re: Understanding objc_assign_strongCast
- Subject: re: Understanding objc_assign_strongCast
- From: Ben Trumbull <email@hidden>
- Date: Wed, 6 Feb 2008 17:23:43 -0800
Dave,
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.
In fact, I've written some pretty hairy hybrid memory model code, and
have yet to find a use for calling objc_assign_strongCast() myself.
The GC programming guide talks about using CFRetain/CFRelease in the
section on Core Foundation objects. The primary difference with C++
objects is that C++'s new is from unscanned malloc memory where as CF
types (with the default allocator) are allocated from scanned memory.
--
-Ben
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden