Re: Avoiding leaks with "initWithCGImage"
Re: Avoiding leaks with "initWithCGImage"
- Subject: Re: Avoiding leaks with "initWithCGImage"
- From: JPH via Cocoa-dev <email@hidden>
- Date: Thu, 24 Aug 2023 10:35:57 +0200
Thanks to all of you
The CFRelease(imageRef); was the problem and the CFRelease(subImageRef); is OK
My fault was then to apply the old days « Create rule » , bypassing ARC !
I was misled by Instruments/Leaks which reports a leak, which meant to me that
I had to look for a missing release, not an over-release !!
Very confusing !
Thank again
Happy Dog Days ( 41°C / 105,8°F here ! )
JP
> Le 24 août 2023 à 00:55, Rob Petrovec <email@hidden> a écrit :
>
> CGImageForProposedRect returns an autoreleased CGImageRef, so your
> CFRelease(imageRef) is an overrelease and likely the cause of your problem.
> The rest of the code looks fine, including the release of subImageRef (if it
> was uncommented).
>
> —Rob
>
> Le 24 août 2023 à 01:11, Alex Zavatone <email@hidden> a écrit :
>
> 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
Le 24 août 2023 à 07:44, Sandor Szatmari <email@hidden> a écrit
:
You mention ARC… aren’t you not supposed to explicitly release objects under
ARC? Am I misunderstanding?
Sandor
>
>> On Aug 23, 2023, at 4:47 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