ios - 将对象传递到 ASIHTTPRequest block

标签 ios block

好的。我对 block 不是很清楚,但我经常使用它们;特别是在执行 ASIHTTPRequest 时。我想将一个对象传递到 block 中,并让请求在完成时为对象分配一个值,但我不知道如何使对象在 block 内“可用”。

这是我的方法...

- (void)fetchImageAsynchronously:(NSURL *)theURL intoImageObject:(UIImage *)anImageObject
{
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:theURL];
    [request setDownloadCache:[ASIDownloadCache sharedCache]];
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
    [request setCompletionBlock:^{
        NSData *responseData = [request responseData];
        anImageObject = [UIImage imageWithData:responseData];
    }];
    [request setFailedBlock:^{
        // NSError *error = [request error];
    }];
    [request startAsynchronous];
}

因此,当请求完成时,我希望 anImageObject 的值是获取的图像。但是 block 内没有 ImageObject。

有人愿意帮忙吗?

最佳答案

一个 ImageObject 必须通过引用传递。也就是UIImage**,调用方法的时候传入一个ImageObject的地址。

这不是一个很好的设计,因为您还必须管理 anImageObject 的生命周期,并且还可能发布某种它已准备就绪的通知。也就是说,如果在下载图像数据所需的时间内释放了 ImageObject,则此代码将中断。而且您不会知道 ImageObject 是否使用数据进行了初始化。

- (void)fetchImageAsynchronously:(NSURL *)theURL intoImageObject:(UIImage **)anImageObject
{
    __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:theURL];
    [request setDownloadCache:[ASIDownloadCache sharedCache]];
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
    [request setCompletionBlock:^{
        NSData *responseData = [request responseData];
        *anImageObject = [UIImage imageWithData:responseData];
    }];
    [request setFailedBlock:^{
        // NSError *error = [request error];
    }];
    [request startAsynchronous];
}

关于ios - 将对象传递到 ASIHTTPRequest block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9073954/

相关文章:

c# - 推送通知无法使用 asp.net 到达 ios 设备?

ios - 将 JSON 对象发布到 Restful Web 服务

ios - ARC block ,弱和保留计数

css - 具有未知宽度和子元素数量的对齐网格

html - 显示 : block on a nav bar (CSS) isn't working like I think it should. ...?

ios - heightForRowAtIndexPath 无法正常工作

ios - 获取 .strings 文件的文本

ios - UIDocumentMenuViewController 取消呈现 View Controller

swift - 如何使用调用回调的函数制作 swift 3.0 类?

java - 如何使 JTextField 或 JFormattedTextField 仅在与 REGEX 模式匹配时才接受输入?