Hello all,
I'm currently facing the following issue:
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:
- (void)addImageToArray:(UIImage*)theImage {
if ([myMutableArray count] < 5) {
[myMutableArray addObject:theImage];
}
else {
[myMutableArray removeObjectAtIndex:0];
[myMutableArray addObject:theImage];
}
}
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.
Any help appreciated. Thanks in advance
[EDIT:]
As requested, I'm adding part of my code, which creates the image:
-(UIImage*)getGL {
unsigned char buffer[320*480*4];
glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);
CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &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;
}
So, now I can do something like this:
[self addImageToArray:[self getGL]];
Hope, this helps. Thanks again.