Re: NSImage and F_NOCACHE
Re: NSImage and F_NOCACHE
- Subject: Re: NSImage and F_NOCACHE
- From: Bill Bumgarner <email@hidden>
- Date: Wed, 4 Oct 2006 10:36:26 -0700
On Oct 4, 2006, at 8:48 AM, Alexander Cohen wrote:
Im using F_NOCACHE with fcntl just before loading the file up as an
NSImage so the data does not get cached and memory stays down. Im
doing this because im converting thousands of images ( eps, tif,
psd, pdf, anything... ). Thing is, memory never comes down. I
though it might be a memory leak or something so i brought the code
down to this:
int err = 0;
int fd = open( [self cString], O_RDWR );
err = fcntl(fd, F_NOCACHE, 1);
NSImage* img = [[NSImage alloc] initWithContentsOfFile:self];
[img release];
img = nil;
If i comment out the NSImage line, memory stays down of course, as
soon as i add it back in, memory goes way up. BTW, fcntl is always
returning 0 so there are no errors. Any ideas what might be going on?
The open/fcntl sequence have absolutely no impact upon the call to -
initWithContentsOfFile:. open opens a file descriptor and fcntl()
applies an option to that file descriptor. -initWithContentsOfFile:
takes a string and opens the file itself; it has no way of even
getting a hold of the file descriptor you are creating, much less
actually using it.
Also, the -cString method is deprecated. Use -
fileSystemRepresentation.
The above code implies that it is on a category of NSString? That
seems a bit odd, design pattern wise.
You could probably use a combination of -initByReferencingFile: and -
recache to get the memory management behavior you desire, but I'm not
entirely sure about that. I would suggest reading everything you can
about NSImage. Worse comes to worse, you might need to drop to one
of the lower level image manipulation APIs. Or try NSImageRep as it
seems to be one step beyond the NSImage caching behavior.
b.bum
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden