Re: Avoiding leaks with "initWithCGImage"
Re: Avoiding leaks with "initWithCGImage"
- Subject: Re: Avoiding leaks with "initWithCGImage"
- From: Alex Zavatone via Cocoa-dev <email@hidden>
- Date: Wed, 23 Aug 2023 18:11:15 -0500
Got a small sample we could play with? I would expect the crash on explicit
release as it would cause a double release.
I tend to ignore I strums to with leaks and use the Memory Graph debugger
religiously.
If you have a little sample showing this, I would be happy to test a bit with
it.
Cheers,
Alex Zavatone
Sent from my iPad
> On Aug 23, 2023, at 5:48 PM, JPH via Cocoa-dev <email@hidden>
> wrote:
>
> Hello friends,
>
> The enclosed procedure is producing a NSImage from another NSImage, by
> cropping in a NSRect.
> The resulting sub-Image feeds an imageView in the APP Interface and the may
> change frequently, then being hopefully disposed by ARC
> The last line of the procedure :
> NSImage *subImage = [[NSImage alloc] initWithCGImage:subImageRef
> size:NSZeroSize];
> Generates a leak problem.
>
> it is quite unclear if i should release or not the subImageRef.
>
> If I release, the app crashes soon after.
> If I don’t release, Instrument/Leaks reports a leak of subImageRef after
> each call.
>
> Obviously, ARC never releases subImageRef which, as far as I
> understand, is owned by the subImage after the call.
>
> Digging the web , apple doc, and various AI, did not provide a solution to
> this dilemme.
>
> I would greatly appreciate some help on this
>
> Happy summer..
> JP
>
> C
> //=============================================================================
> + (NSImage *)getSubImageFromImage:(NSImage *)image atRect:(NSRect)rect
> //=============================================================================
> {
> // Convert the NSImage to a CGImageRef
> CGImageRef imageRef= nil, subImageRef= nil;
> imageRef = [image CGImageForProposedRect:NULL context:nil hints:nil];
> if (imageRef == nil ) { return nil; } // Failed to create CGImageRef
> // Get the subimage from the CGImageRef
> subImageRef = CGImageCreateWithImageInRect(imageRef, rect);
> CFRelease(imageRef);
> if(subImageRef == nil ) { return nil; } // Failed to create subImageRef
> // Convert the subimage CGImageRef to an NSImage
> NSImage *subImage = [[NSImage alloc] initWithCGImage:subImageRef
> size:NSZeroSize];
> // CFRelease(subImageRef); // it is quite unclear if i should release the
> subImageRef
> //If I release, the app crashes soon after.
> // If i dont release Instrument/Leaks report a leak at next call.
> // The subImage goes to a NSbutton in the interface, and will also soon be
> replaced by another one, producing a leak of subImageRef
>
> return subImage;
> }// getSubImageFromImage
> _______________________________________________
>
> 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
_______________________________________________
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