Re: Garbage collector vs variable lifetime
Re: Garbage collector vs variable lifetime
- Subject: Re: Garbage collector vs variable lifetime
- From: Antonio Nunes <email@hidden>
- Date: Sat, 7 Jun 2008 05:48:21 +0200
On 7 Jun 2008, at 01:42, Bill Bumgarner wrote:
The easiest way to do this is to simply to use data once after the
for() loop:
NSData* data = <get it from somewhere>;
const unsigned char* bytes = [data bytes];
NSUInteger count = [data length];
for (NSUInteger i = 0; i < count; i++)
something = bytes [i];
[data self];
Yup. I don't particularly like it either. Fortunately, it is an
uncommon case -- most of the objects in the AppKit/Foundation "just
work". This kind of a problem arises when something leverages the
C in Objective-C.
Quincey Morris wrote:
A little inner voice insists on asking, though, how we know some
future version of the compiler might not optimize '[data self]'
upwards before the loop, if it decides that nothing inside the loop
references anything non-local:
Why not explicitly turn off collection for the data pointer:
NSData* data = <get it from somewhere>;
[[NSGarbageCollector defaultCollector] disableCollectorForPointer:data];
const unsigned char* bytes = [data bytes];
NSUInteger count = [data length];
for (NSUInteger i = 0; i < count; i++)
something = bytes [i];
[[NSGarbageCollector defaultCollector] enableCollectorForPointer:data];
It's slightly longer, but straightforward and clear about it's
purpose, and should be future proof.
António
----------------------------------------------------
It isn't so important to do great things,
as to do what you do with great love.
----------------------------------------------------
_______________________________________________
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