私のプロジェクトは、写真の評価に基づいています。メモリリークやクラッシュなしで、リンクからイメージビューに画像をすばやく表示する最良の方法を知りたいです。将来的には、画像が数十万のオーダーになる可能性があるため、これらの画像を表示する必要があります。最初に画像をダウンロードする必要がありますか??? どなたか詳しい方がいらっしゃいましたら、解決策を教えてください。
事前にすべてに感謝します。
写真をインターネットから非同期でダウンロードできるため、アプリの応答性が維持されます。そのための解決策はすでにあります。たとえば、メソッドを呼び出すことによって
[yourAsynchronousImageView loadImageFromURLString:@"http://your.url/image.jpg"];
の
#import <UIKit/UIKit.h>
@interface AsynchronousImageView : UIImageView {
NSURLConnection *connection;
NSMutableData *data;
bool loading;
}
@property bool loading;
- (void)loadImageFromURLString:(NSString *)theUrlString;
@end
と
#import "AsynchronousImageView.h"
@implementation AsynchronousImageView
@synthesize loading;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)loadImageFromURLString:(NSString *)theUrlString{
self.image = nil;
NSURLRequest *request = [NSURLRequest requestWithURL:
[NSURL URLWithString:theUrlString]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:30.0];
connection = [[NSURLConnection alloc]
initWithRequest:request delegate:self];
loading=true;
}
- (void)connection:(NSURLConnection *)theConnection
didReceiveData:(NSData *)incrementalData { if (data == nil)
data = [[NSMutableData alloc] initWithCapacity:2048];
[data appendData:incrementalData];}
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection {
self.image = [UIImage imageWithData:data];
data = nil;
connection = nil;
loading=false;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end