Hi

I'm trying to write a thumbnailer class that takes a path to a photo and creates a thumbnail at a user specified size. The code creates the thumbnails OK, but there's this monster memory leak, to the tune of about 100 MB every 3-4 seconds, that seems to be related to NSImage.

What's happening is that if I comment out the line that initializes a new image, the memory leak disappears. I've tried forcibly releasing the images, tried autoreleasing them, tried creating a fixed size buffer into which all the images are read, nothing seems to work.

I'm using garbage collection, so that along with the deliberate releasing of the images, makes me wonder why the collector isn't getting the hint, that it's ok to release the memory for these photos. Could someone point out what I'm doing in the following code that prevents the images from getting released?

Thanks for any help

- (NSString *) createJPEGThumbnail:(NSString *) inPath
                        site:(NSString *) inSite
{
        NSDictionary                    *siteRecord,
                                                        *pubRecord;
                                                        
        NSString                                *sourceName             = 
[inPath lastPathComponent],
                                                        *sourceRoot             
        = [sourceName stringByDeletingPathExtension],
*destName = [[sourceRoot stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding] stringByAppendingPathExtension: @"jpg"],
                                                        *pubCode                
        = [self pubCodeFromPath: inPath],
                                                        *thumbPath;

        NSFileManager                   *manager                        = 
[NSFileManager defaultManager];
                        
        siteRecord                              = [thumbDirectories 
objectForKey: inSite];
pubRecord = [[siteRecord objectForKey: @"publications"] objectForKey: pubCode];
        
        if (pubRecord == nil)
pubRecord = [[siteRecord objectForKey: @"publications"] objectForKey: @"~MISCELLANEOUS"];
                
thumbPath = [[pubRecord objectForKey: @"thumb_path"] stringByAppendingPathComponent: destName];
        
        if (![manager fileExistsAtPath: thumbPath])
        {
                // I've tried both of these, didn't make the slightest 
difference.
                // Both leaked memory at a furious pace
                
                // Option 1:
NSImage *image = [[[NSImage alloc] initWithContentsOfFile: inPath] autorelease];
                
                /* do some stuff */
                
                
                // Option 2
NSImage *image = [[NSImage alloc] initWithContentsOfFile: inPath];
                
                /* do some stuff */
                
                [image release];
        }
        
        // make sure it worked
        if ([manager fileExistsAtPath: thumbPath])
                return thumbPath;
        else
                return nil;
}
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to