FlyImage takes the advantages of SDWebImage, FastImageCache and AFNetworking, is a simple and high performance image library.
Features:
- High Performance, reduce memory operations while rendering, avoid
Memory warningcaused by image - Store and retrieve different size of small images in one memory file, smooth scrolling
- Simple, support
UIImageView,CALayercategory - An asynchronous image downloader
- Support
WebPformat - Support
mmapto improve I/O performace
Installation with CocoaPods
Set the Podfile like this:
platform :ios, '8.0'
pod 'FlyImage', '~>1.0'
If you are using Swift, be sure to add use_frameworks!:
platform :ios, '8.0'
use_frameworks!
pod 'FlyImage', '~>1.0'
If you want to support WebP, just change the Podfile:
platform :ios, '8.0'
pod 'FlyImage/WebP', '~>1.0'
How To Use
Using UIImageView and CALayer Category
#import "FlyImage.h" ... UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; [imageView setPlaceHolderImageName:@"default" thumbnailURL:[NSURL urlWithString:@"http://thumbnail"] originalURL:[NSURL urlWithString:@"http://original"]]; []self.view addSubview:imageView]; ... UIImageView *iconView = [[UIImageView alloc] initWithFrame:frame]; [iconView setIconURL:[NSURL urlWithString:@"http://original"]]; []self.view addSubview:iconView]; ...
Using FlyImageCache
// retrieve a specific key, and get callback [[FlyImageCache sharedInstance] asyncGetImageWithKey:key completed:^(NSString *key, UIImage *image) { imageView.image = image; }]; // remove a image from the cache [[FlyImageCache sharedInstance] removeImageWithKey:key]; // delete all images [[FlyImageCache sharedInstance] purge];
Using FlyImageIconCache
// add a new icon with a specific key [[FlyImageIconCache sharedInstance] addImageWithKey:key size:drawSize drawingBlock:^(CGContextRef context, CGRect contextBounds) { UIImage *image = [UIImage imageWithName:@"imageName"]; UIGraphicsPushContext(context); [image drawInRect:contextBounds]; UIGraphicsPopContext(); } completed:nil]; // retrieve a specific key, and get callback [[FlyImageCache sharedInstance] asyncGetImageWithKey:key completed:^(NSString *key, UIImage *image) { imageView.image = image; }];
More demos in folder Examples
Performance Mesure
Memory when scrolling images
Demo Target: FlyImageView / Device: iPhone6 Plus
| Memory | FlyImage | SDWebImage | UIKit |
|---|---|---|---|
| All Heap Allocations | 2~7M | 2~4M | 2~5M |
| All Anonymous VM | 17~30M | 310M | 17~30M |
FPS when more than 170 small images in the same screen
Demo Target: FlyImageIconView / Device: iPhone6 Plus
| FlyImage | SDWebImage | UIKit |
|---|---|---|
| 58~60FPS | 6~7FPS | 6~7FPS |
Architecture
License
FlyImage is made available under the MIT license
