gpt4 book ai didi

ios - 是否可以继承 NSURLSessionDownloadTask 来为服务创建专用 API?

转载 作者:行者123 更新时间:2023-12-01 18:14:59 25 4
gpt4 key购买 nike

假设我想创建一种从 Imgur 下载图像的简单方法.我在我的应用程序中经常这样做,所以不必为 NSURLSessionDownloadTask 完成所有设置会很好。并为这个用例配置它,相反我可以使用一个可以处理大部分配置的子类。

是否可以继承 NSURLSession以一种允许与特定服务轻松交互的方式?

假设我经常从 Imgur 链接获取图像 ID,例如 mFJlvPf .而不是设置 NSURLSession ,设置其配置,创建 NSURLRequest ,从 NSURL 中获取结果下载它的位置,我可以只提供图像 ID 并前往城镇:

ImgurDownloadTask *downloadTask = [ImgurDownloadTask taskWithImageID:@"mFJlvPf"
progressBlock:^(CGFloat bytesWritten, CGFLoat totalBytesExpectedToBeWritten) {
}
completionBlock:^(UIImage *downloadedImage) {
}];

[downloadTask resume];

这样的简化可能吗?如果是这样,我将如何去做?

最佳答案

这确实是可能的。我会这样处理问题:

@interface ImgurClient : NSObject
+(instancetype) sharedClient;
-(NSURLSessionDownloadTask*)taskWithImageID:(NSString*)imageId
progressBlock:(void (^)(/*TBD*/))progressBlock
completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler
@end

@implementation ImgurClient {
NSURLSession* session;
}

+(instancetype) sharedClient {
static ImgurClient* _sharedClient = nil;
static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
_sharedClient = [[ImgurClient alloc] init];
});

return _sharedClient;
}

-(id) init {
self = [super init];
if (self) {
// Additional initialisation, setting up NSURLSession, etc
}
}

-(NSURLSessionDownloadTask*)taskWithImageID:(NSString*)imageId
progressBlock:(void (^)(/*TBD*/))progressBlock
completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler {
// Build URL, store progress handler, create download task
}

也就是说,有一个 ImgurClient单例对象,每当您需要执行请求时,您都可以使用它,如 [[ImgurClient sharedClient] taskWithImageId:@"..." ....]; .

关于ios - 是否可以继承 NSURLSessionDownloadTask 来为服务创建专用 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com