首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以复制NSURLsession委托类iOS。

可以复制NSURLsession委托类iOS。
EN

Stack Overflow用户
提问于 2014-04-03 22:48:46
回答 1查看 281关注 0票数 0

我有多个使用NSURLSession的类,它们可以同时运行,如果我让它们都是NSURLSession委托的话,可以吗?

代码:

第一代表:

代码语言:javascript
复制
@interface userLoginScreen : UIViewController <UIAlertViewDelegate,  NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>

第二位代表:

代码语言:javascript
复制
@interface syncDataOperation : NSOperation <NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDownloadDelegate>

这样做是很好的做法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-04 07:24:32

在您的示例中,您所做的就是说“所有这些类都实现了这个接口”,这是非常好的,并且与运行时实际发生的事情没有任何实际关系。

我认为您所遇到的情况是,您可能希望有一个委托对象从NSURLSession中的多个对象接收委托消息。例如,对于多个NSURLSessionTask对象有一个委托句柄回调是完全正常的。

唯一真正的问题可能是,如果将委托消息输入到多个不同的线程/队列中。但是,苹果已经为此设计了;当您创建一个NSURLSession对象时,您可以为要发送的回调提供一个特定的delegateQueue。例如,这是delegateQueue in sessionWithConfiguration:delegate:delegateQueue

如果您不提供,NSURLSession“创建一个串行NSOperationQueue对象,在其上执行所有委托方法调用和完成处理程序调用”,这是一个非常明智的默认设置。

您在一个NSURLSession下创建的任务也将对其委托消息使用该委托队列。

例如,如果您创建一个NSURLSession而不指定delegateQueue,它将为其委托消息创建一个串行队列。如果然后调用downloadTaskWithRequest来创建NSURLSessionDownloadTask,则下载任务的委托方法将使用相同的队列。

如果您在上面创建了30个NSURLSessionDownloadTask,它们都指向同一个委托,它们都将使用相同的队列发送委托消息,而且由于它是一个串行队列,您的委托永远不会同时到达两个委托消息,因此您不必担心编码来处理这种情况。(而且所有委托消息都将指针传递给相关的NSURLSession/NSURLSessionTask,这样您就可以知道哪些消息来自哪个任务。)

通常,必须处理特定任务集的所有委托对象都将处理在同一个NSURLSession对象下创建的任务,因此默认情况下,所有东西都使用相同的委托队列,如果您不费心地传递delegateQueue,那么,正如我已经说过的,NSURLSession为您提供了一个合理的任务,所以大多数情况下,委托应该只起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22850408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档