UIImage *image = [UIImage imageWithData:newImage]; //HERE IS LEAK !!!!
You are creating an autoreleased object here. Since you're doing this on a background thread, any autoreleased objects you create won't get released unless your thread has its own autorelease pool.
If you are using ARC, create an autorelease pool with the @autoreleasepool keyword:
@autoreleasepool {
UIImage *image = [UIImage imageWithData:newImage];
// Do stuff with image
}
If you're not using ARC, create an autorelease pool manually:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *image = [UIImage imageWithData:newImage];
// Do stuff with image
[pool release];