FROM : Andrew Thompson
DATE : Sun Jan 20 18:42:16 2008
On Jan 19, 2008, at 6:17 PM, Clark Cox wrote:
> On Jan 19, 2008 2:56 PM, Andrew Thompson <<email_removed>> wrote:
>> I want to call a Core function that returns a CFArrayRef and make the
>> result garbage collectable.
>> The CFArray contains CFStrings...
>>
>> Is this pattern OK?
>>
>> -(NSArray *) doFoo {
>> return NSMakeCollectable(CFCopyFoo(someArgs));
>> }
>>
>> Where CFCopyFoo returns a new CFArray containing copied CFStrings.
>
> This will make the array collectable, but will do nothing to the items
> contained therein; the contents are still reference counted. However,
> this is most likely what you want anyway (Just as in pre-GC code, when
> an item is removed from the array, or the array itself is
> collected/deallocated, the item will have its reference count
> decremented, and will be deallocated if that was the last remaining
> reference).
That's more or less what I figured, thanks.
>
>> Or do I have to iterate over the array and call NSMakeCollectable on
>> each item in it?
>
> That would do something completely different, and would not be a good
> idea (it would be akin to calling CFRelease on each of the items).
Really? I would have thought that since each is in the array, so long
as the array isn't garbage then each string is referenced and is
therefore also not garbage and will stick around as long as the array
does?
So on balance - if the strings are going to be left in the array, then
making the array collectable is enough - once it becomes garbage the
strings will be released too.
Conversely if I intend to pull the strings out of the array and start
passing them around to other objects in my program, I likely want to
take the extra trouble to make each one collectable, otherwise I might
forget to release them and they'll leak.
AndyT (lordpixel - the cat who walks through walls)
A little bigger on the inside
(see you later space cowboy, you can't take the sky from me)
DATE : Sun Jan 20 18:42:16 2008
On Jan 19, 2008, at 6:17 PM, Clark Cox wrote:
> On Jan 19, 2008 2:56 PM, Andrew Thompson <<email_removed>> wrote:
>> I want to call a Core function that returns a CFArrayRef and make the
>> result garbage collectable.
>> The CFArray contains CFStrings...
>>
>> Is this pattern OK?
>>
>> -(NSArray *) doFoo {
>> return NSMakeCollectable(CFCopyFoo(someArgs));
>> }
>>
>> Where CFCopyFoo returns a new CFArray containing copied CFStrings.
>
> This will make the array collectable, but will do nothing to the items
> contained therein; the contents are still reference counted. However,
> this is most likely what you want anyway (Just as in pre-GC code, when
> an item is removed from the array, or the array itself is
> collected/deallocated, the item will have its reference count
> decremented, and will be deallocated if that was the last remaining
> reference).
That's more or less what I figured, thanks.
>
>> Or do I have to iterate over the array and call NSMakeCollectable on
>> each item in it?
>
> That would do something completely different, and would not be a good
> idea (it would be akin to calling CFRelease on each of the items).
Really? I would have thought that since each is in the array, so long
as the array isn't garbage then each string is referenced and is
therefore also not garbage and will stick around as long as the array
does?
So on balance - if the strings are going to be left in the array, then
making the array collectable is enough - once it becomes garbage the
strings will be released too.
Conversely if I intend to pull the strings out of the array and start
passing them around to other objects in my program, I likely want to
take the extra trouble to make each one collectable, otherwise I might
forget to release them and they'll leak.
AndyT (lordpixel - the cat who walks through walls)
A little bigger on the inside
(see you later space cowboy, you can't take the sky from me)
| Related mails | Author | Date |
|---|---|---|
| Andrew Thompson | Jan 19, 23:56 | |
| mmalc crawford | Jan 20, 00:04 | |
| Clark Cox | Jan 20, 00:17 | |
| Andrew Thompson | Jan 20, 18:42 | |
| Clark Cox | Jan 20, 19:30 |






Cocoa mail archive

