Monster memory leak and I can't figure out why
site_archiver@lists.apple.com Delivered-To: cocoa-dev@lists.apple.com Hi Thanks for any help 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/site_archiver%40lists.apple... 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? - (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; } _______________________________________________ This email sent to site_archiver@lists.apple.com
participants (1)
-
Ken Tozier