-2

私のプロジェクトは、写真の評価に基づいています。メモリリークやクラッシュなしで、リンクからイメージビューに画像をすばやく表示する最良の方法を知りたいです。将来的には、画像が数十万のオーダーになる可能性があるため、これらの画像を表示する必要があります。最初に画像をダウンロードする必要がありますか??? どなたか詳しい方がいらっしゃいましたら、解決策を教えてください。

事前にすべてに感謝します。

4

1 に答える 1

0

写真をインターネットから非同期でダウンロードできるため、アプリの応答性が維持されます。そのための解決策はすでにあります。たとえば、メソッドを呼び出すことによって

[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
于 2012-06-13T12:08:54.503 に答える