A simple COCOA Asynchronous image loader class to use in your iPhone app.
This isnt a tutorial, this is just some source code that you might find useful. This class will load images in the background so it wont lock your UI up!
UPDATED:Please note that this post has a new updated version found here: UIImage From URL – Simplified (Using Blocks)
Here’s the header file :
NSURLConnection * connection;
NSURL * url;
NSMutableData * mutData;
UIImage * image;
id delegate;
}
@property ( nonatomic, retain ) UIImage * image;
- (id)initWithURL:(NSURL *)aURL;
- (void)setDelegate:(id)anObject;
- (void)load;
@end
@protocol GGImageLoaderProtocol
@required
- (void)imageLoader:(GGImageLoader *)loader
didLoadImage:(UIImage *)anImage;
@optional
- (void)imageLoader:(GGImageLoader *)loader
didReceiveError:(NSError *)anError;
@end
and heres the main file :
@implementation GGImageLoader
@synthesize image;
- (void)dealloc
{
[super dealloc];
[url release];
[connection release];
[mutData release];
[image release];
}
- (id)initWithURL:(NSURL *)aURL
{
url = [aURL retain];
return self;
}
- (void)setDelegate:(id)anObject
{
delegate = anObject;
}
- (void)load
{
// SHOW NETWORK INDICATOR
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
// SET UP THE REQUEST
NSURLRequest * request = [[[NSURLRequest alloc] initWithURL:url] autorelease];
// SET UP THE CONNECTION
connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
// NEW MUT DATA
mutData = [[[NSMutableData alloc] init] retain];
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
if( [delegate respondsToSelector:@selector(imageLoader:didReceieveError:)] )
{
[delegate imageLoader:self
didReceiveError:error];
}
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data
{
// APPEND THE DATA
[mutData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection
{
// ONCE LOADED HIDE NETWORK INDICATOR
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
// RELEASE THE CONNECTION
[connection release];
// CREATE NEW UIIMAGE FROM THE DATA
image = [[[UIImage alloc] initWithData:mutData] retain];
if( [delegate respondsToSelector:@selector(imageLoader:didLoadImage:)] )
{
[delegate imageLoader:self
didLoadImage:image];
}
}
@end
Its pretty self explanatory, meerly do the following to get it to work..
[imageLoader setDelegate:self];
[imageLoader load];
The class also has delegate methods and a protocol to follow, so we know when the image has loaded, you can use the GGImageLoaderProtocol in your header file if you like.
Thats about it, hope its helps some people out!
If ive made a mistake anywhere in this please say, it was a rush post!
posted on 2012-03-31 22:35 kiao295338444 阅读(172) 评论(0) 编辑 收藏 举报