Also, in your run scheme, enable the Diagnostics for Logging > Malloc Stack > 
Live Allocations Only.

> On May 20, 2020, at 10:08 AM, Georg Seifert via Cocoa-dev 
> <cocoa-dev@lists.apple.com> wrote:
> 
> You need to check the backtrace where the leaking object was created. 
> Sometimes it points to a line that has nothing to do with the leak, it is 
> just triggering it.
> 
> g
> 
>> On 20.05.2020, at 16:03, Gabriel Zachmann via Cocoa-dev 
>> <cocoa-dev@lists.apple.com <mailto:cocoa-dev@lists.apple.com>> wrote:
>> 
>> I have a few stupid questions regarding (potential) memory leaks,
>> so please bear with me.
>> First of all, my code is ARC managed.
>> 
>> I tried the Leaks tool of Instruments.
>> 
>> It tells me, if i understand correctly, that I have a leak at this line of 
>> my code:
>> 
>>   CFDictionaryRef fileProps = CGImageSourceCopyPropertiesAtIndex( new_image, 
>> 0, NULL ); 
>> 
>> This line is in a method I declared like that:
>> 
>> - (void) loadNextImageWithIndex: (unsigned long) next_index image: 
>> (CGImageRef *) next_image
>>                     withProps: (CFDictionaryRef *) next_props
>> 
>> and at the end of the function, I pass fileProps back like so
>> 
>>  *next_props = fileProps;
>> 
>> The caller then makes a copy of next_props for later use, and CFRelease's 
>> next_props.
>> (That copy is also released later.)
>> 
>> So it is unclear to me why the Leaks tool thinks that the above line leaks 
>> memory.
>> 
>> 
>> 
>> Another area of questions is around CALayer's and images.
>> I create images like so:
>> 
>>   CGImageRef newImageRef = CGImageSourceCreateThumbnailAtIndex( new_image, 0,
>>                                                              (__bridge 
>> CFDictionaryRef) imageOpts );
>> I store newImageRef in an array (history_of_images).
>> Then, I assign newImageRef to a CALayer like this:
>> 
>>   imgLayer.contents = (__bridge id)(newImageRef);
>> 
>> At some point later, when the layer is no longer part of the layer 
>> hierarchy, I release it like this:
>> 
>>  CGImageRelease( history_of_images[k].img );
>> 
>> Can you spot any point in this sequence where there could be a memory leak?
>> Does any of the assignments I described create a copy?
>> Should I release CALayer's myself after I have removed it from its super 
>> layer?
>> By the growth of the memory usage of my app I suspect that the images I've 
>> been loading keep lingering on somewhere in memory.
>> 
>> 
>> Another area of questions centers around dispatch queues.
>> The above stuff (loading, thumbnail creation) is, mostly, done in a 
>> background thread via dispatch_async.
>> I have tried to put an @autoreleasepool around the code that runs in the 
>> background thread, to no avail.
>> (My code is under ARC.)
>> 
>> But in Instruments, all indications (e.g., Heaviest stack trace) point to 
>> CGImageSourceCreateThumbnailAtIndex, that shows a stack trace like that:
>> 
>> 13 libdispatch.dylib  269.42 KB     _dispatch_client_callout
>> 12 ArtSaverApp  269.42 KB     -[ArtSaverView loadNextImage] 
>> /Users/zach/Code/ArtSaver/ArtSaverView.m:2045
>> 11 ArtSaverApp  269.42 KB     -[ArtSaverView 
>> loadNextImageWithIndex:image:withProps:] 
>> /Users/zach/Code/ArtSaver/ArtSaverView.m:2083
>> 10 ImageIO  248.44 KB     CGImageSourceCopyPropertiesAtIndex
>>  9 ImageIO  248.44 KB     IIOImageSource::copyPropertiesAtIndex(unsigned 
>> long, IIODictionary*)
>>  8 ImageIO  248.30 KB     
>> IIOImageSource::getPropertiesAtIndexInternal(unsigned long, IIODictionary*)
>>  7 ImageIO  244.78 KB     IIOImageSource::makeImagePlus(unsigned long, 
>> IIODictionary*)
>>  6 ImageIO  100.08 KB     
>> IIO_Reader_AppleJPEG::initImageAtOffset(CGImagePlugin*, unsigned long, 
>> unsigned long, unsigned long)
>>  5 ImageIO   97.58 KB     IIOReadPlugin::callInitialize()
>>  4 ImageIO   93.64 KB     AppleJPEGReadPlugin::initialize(IIODictionary*)
>>  3 ImageIO   52.00 KB     AppleJPEGReadPlugin::appleJPEGDecodeSetup()
>>  2 AppleJPEG   52.00 KB     applejpeg_decode_create
>>  1 libsystem_malloc.dylib   52.00 KB     malloc
>>  0 libsystem_malloc.dylib   52.00 KB     malloc_zone_malloc
>> 
>> (ArtSaverApp is, of course, my code.)
>> Similar backtraces show up when I click on the various Malloc leaks in the 
>> Leaks by Backtrace view.
>> Almost all of them go through CGImageSourceCopyPropertiesAtIndex(), and the 
>> responsible library is 
>> ImageIO.
>> 
>> 
>> Thanks a lot in advance for all kinds of insights and hints.
>> 
>> 
>> 
>> _______________________________________________
>> 
>> 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:
>> https://lists.apple.com/mailman/options/cocoa-dev/georg.seifert%40gmx.de 
>> <https://lists.apple.com/mailman/options/cocoa-dev/georg.seifert%40gmx.de>
>> 
>> This email sent to georg.seif...@gmx.de <mailto:georg.seif...@gmx.de>
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com 
> <mailto: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 
> <http://lists.apple.com/>
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com 
> <https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com>
> 
> This email sent to z...@mac.com <mailto:z...@mac.com>
_______________________________________________

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

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

Reply via email to