title: Memory allocation and release for UIImage in iPhone?
body: <p>I am using following code in iPhone to get smaller cropped image as follows:</p>
  
  <pre><code>- (UIImage*) getSmallImage:(UIImage*) img
  {
      CGSize size = img.size;
      CGFloat ratio = 0;
      if (size.width &lt; size.height) {
          ratio = 36 / size.width;
      } else {
          ratio = 36 / size.height;
      }
      CGRect rect = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);
  
      UIGraphicsBeginImageContext(rect.size);
      [img drawInRect:rect];
  
      UIImage *tempImg = [UIGraphicsGetImageFromCurrentImageContext() retain];
  
      UIGraphicsEndImageContext();
      return [tempImg autorelease];
  }
  
  - (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
  {
  
      //create a context to do our clipping in
      UIGraphicsBeginImageContext(rect.size);
      CGContextRef currentContext = UIGraphicsGetCurrentContext();
  
      //create a rect with the size we want to crop the image to
      //the X and Y here are zero so we start at the beginning of our
      //newly created context
  
      CGFloat X = (imageToCrop.size.width - rect.size.width)/2;
      CGFloat Y = (imageToCrop.size.height - rect.size.height)/2;
  
  
      CGRect clippedRect = CGRectMake(X, Y, rect.size.width, rect.size.height);
      //CGContextClipToRect( currentContext, clippedRect);
  
  
  
      //create a rect equivalent to the full size of the image
      //offset the rect by the X and Y we want to start the crop
      //from in order to cut off anything before them
      CGRect drawRect = CGRectMake(0,
                                   0,
                                   imageToCrop.size.width,
                                   imageToCrop.size.height);
  
      CGContextTranslateCTM(currentContext, 0.0, drawRect.size.height);
      CGContextScaleCTM(currentContext, 1.0, -1.0);
      //draw the image to our clipped context using our offset rect
      //CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage);
  
  
      CGImageRef tmp = CGImageCreateWithImageInRect(imageToCrop.CGImage, clippedRect);
  
      //pull the image from our cropped context
      UIImage *cropped = [UIImage imageWithCGImage:tmp];//UIGraphicsGetImageFromCurrentImageContext();
      CGImageRelease(tmp);
      //pop the context to get back to the default
      UIGraphicsEndImageContext();
  
      //Note: this is autoreleased*/
      return cropped;
  }
  </code></pre>
  
  <p>I am using following line of code in cellForRowAtIndexPath to update the image of the cell:</p>
  
  <pre><code>cell.img.image = [self imageByCropping:[self getSmallImage:[UIImage imageNamed:@"goal_image.png"]] toRect:CGRectMake(0, 0, 36, 36)];
  </code></pre>
  
  <p>Now when I add this table view and pop it from navigation controller, I see a memory hike.I see no leaks but memory keeps climbing. </p>
  
  <p>Please note that the images changes for each row and I am creating the controller using lazy initialization that is I create or alloc it whenever I need it.</p>
  
  <p>I saw on internet many people facing the same issue, but very rare good solutions. I have multiple views using the same way and I see almost memory raised to 4MB within 20-25 view transitions.</p>
  
  <p>What is the good solution to resolve this issue.</p>
  
  <p>tnx.</p>