【问题标题】:How? UITableViewCell with UIImageView asynchronously loaded via ASINetworkQueue如何? UITableViewCell 和 UIImageView 通过 ASINetworkQueue 异步加载
【发布时间】:2011-03-23 18:54:02
【问题描述】:

我正在尝试使用ASINetworkQueue 在表格单元格中异步加载一些图像。我只是想不通,似乎找不到一个好的简单例子。

我能找到的最好的就是这个,但它完全是矫枉过正,对我来说有点太复杂了: http://kosmaczewski.net/2009/03/08/asynchronous-loading-of-images-in-a-uitableview/

有没有其他人有任何使用ASIHTTPRequest 库的提示/解决方案/代码?

【问题讨论】:

    标签: asynchronous uitableview uiimageview asihttprequest


    【解决方案1】:

    这是我使用的从 UIImageView 派生的类,也许这会对您有所帮助。 (实际上我已经从我使用的内容中简化了一点,但这就是你所要求的!)

    头文件,UIHTTPImageView.h:

    #import "ASIHTTPRequest.h"
    
    @interface UIHTTPImageView : UIImageView {
        ASIHTTPRequest *request;
    }
    
    - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
    
    @end
    

    和 UIHTTPImageView.m:

    #import "UIHTTPImageView.h"
    
    @implementation UIHTTPImageView        
    
    - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder {
        [request setDelegate:nil];
        [request cancel];
        [request release];
    
        request = [[ASIHTTPRequest requestWithURL:url] retain];
        [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
    
        if (placeholder)
            self.image = placeholder;
    
        [request setDelegate:self];
        [request startAsynchronous];
    }
    
    - (void)dealloc {
        [request setDelegate:nil];
        [request cancel];
        [request release];
        [super dealloc];
    }
    
    - (void)requestFinished:(ASIHTTPRequest *)req
    {
    
        if (request.responseStatusCode != 200)
            return;
    
        self.image = [UIImage imageWithData:request.responseData];
    }
    
    @end
    

    【讨论】:

    • 这似乎正是我正在寻找的。不过我确实有一个问题:如果表中的行数非常大,它没有使用“网络队列”,它不会超载吗?
    • 它使用ASIHTTPRequest的共享队列,默认情况下最多进行8个并发下载。如果需要,您可以使用 [[ASIHTTPRequest sharedQueue] setMaxConcurrentOperations:2] 之类的方法来减少这种情况。 (注意:需要来自 git 的最新版本的 asihttprequest,v1.7 及更早版本不要暴露共享队列。)
    • 再次感谢您的帮助!像你这样的人让 StackOverflow 变得很棒!
    • 我知道我这么笨。如何在我的 UIimageView 中使用它
    • @carbonr 用 UIHTTPImageView 替换你对 UIImageView 的使用,然后只需使用 [img setImageWithURL:url placeholder:nil];
    猜你喜欢
    • 2013-08-02
    • 2013-10-11
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多