Note that there are some explanatory texts on larger screens.

plurals
  1. POAdding images to an array memory issue
    primarykey
    data
    text
    <p>I'm currently facing the following issue:</p> <p>My app dynamically creates images (320 x 480 pixels) and adds them to a NSMutableArray. I need those images inside that array in order to allow users to browse through them back and forth. I only need to keep the latest 5 images. So I wrote a method like below:</p> <pre><code>- (void)addImageToArray:(UIImage*)theImage { if ([myMutableArray count] &lt; 5) { [myMutableArray addObject:theImage]; } else { [myMutableArray removeObjectAtIndex:0]; [myMutableArray addObject:theImage]; } } </code></pre> <p>This method basically does what it's supposed to do. However, in instruments I can see, that memory usage is permanently incrementing. At some point, even though I do not have any memory leaks, the app finally crashes. The way I see it, XCode does remove the image from my array, but does not release it. Is there a way I can make sure, that the object I want to remove from my array will also get released? Maybe my approach is completely wrong and I need to find a different way.</p> <p>Any help appreciated. Thanks in advance</p> <p>[EDIT:]</p> <p>As requested, I'm adding part of my code, which creates the image:</p> <pre><code>-(UIImage*)getGL { unsigned char buffer[320*480*4]; glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&amp;buffer); CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &amp;buffer, 320*480*4, NULL); CGImageRef iref = CGImageCreate(320,480,8,32,320*4,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault); size_t width = CGImageGetWidth(iref); size_t height = CGImageGetHeight(iref); size_t length = width*height*4; uint32_t *pixels = (uint32_t *)malloc(length); CGContextRef _context = CGBitmapContextCreate(pixels, width, height, 8, width*4, CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGContextTranslateCTM(_context, 0.0, height); CGContextScaleCTM(_context, 1.0, -1.0); CGContextDrawImage(_context, CGRectMake(0.0, 0.0, width, height), iref); CGImageRef outputRef = CGBitmapContextCreateImage(_context); UIImage *outputImage = [UIImage imageWithCGImage:outputRef]; CGDataProviderRelease(ref); CGImageRelease(iref); CGImageRelease(outputRef); CGContextRelease(_context); return outputImage; } </code></pre> <p>So, now I can do something like this:</p> <pre><code>[self addImageToArray:[self getGL]]; </code></pre> <p>Hope, this helps. Thanks again.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload