2014-08-27 86 views
2

可能我的问题会很愚蠢。AFNetworking和单身人士

我见过很多使用AFNetworking的应用程序的例子和教程。 其中许多使用创建单身客户端与REST服务器进行交互。 例如:

@interface APIClient : AFHTTPClient 

+ (APIClient *)sharedClient; 

@end 

@implementation APIClient 

+ (APIClient *)sharedClient { 
    static APIClient *sharedClient = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedClient = [[APIClient alloc] initWithBaseURL:[NSURL URLWithString:baseUrl]]; 
    }); 

    return sharedClient; 
} 

@end 

但是,是否有安全的单身人士呢?如果我的应用程序是多线程的,那么有一个单例很方便吗?


EDIT

在这种tutorial使用类RestfulClass这是一个单。 它也用于委托来通知请求的结果。 使用委托.. ..这似乎不是最好的选择,如果你正在使用一个单身人士,这是我的想法是正确的吗?

假设我们有两个类:A和B 两者都使用单例,所以使用sharedClient方法。 A和B可以将他们自己设置为委托...这是错误的,因为一个覆盖另一个... 所有方法都无法控制线程安全,这是正确的吗?

+0

singleton是单个实例,可以由多个线程共享,这可以通过确保对象在线程中正确同步 (就像您的方法所做的那样)来完成。由于网络请求异步运行并支持并发操作,因此它在Cocoa中非常安全。 – 2014-08-27 12:02:06

+0

我修改了我的问题。谢谢 – Safari 2014-08-29 10:38:25

回答

0

在这里迟到了,但我一直在寻找关于如何在AFNetworking上正确设置单例的信息。我发现这篇博客文章: singleton-afnetworking

基本上它声明AFNetworking可以处理并发请求没有任何问题。

0

因此,在您添加的教程上引用时,我会说你正确的地方是,如果Web服务的单例实例同时使用单例服务,它将允许其他类重载该代理。

对于教程来说,我认为他们的意图是完全分离Web服务类,所以理想情况下,你永远不会同时使用单例运行到2个类,但或多或​​少的单例只会延迟加载下一次控制器需要它。

我现在正在通过这个决定,我想如果我做一个单一的Web服务类,我只是把它做成一个类,使用静态方法来创建请求(并且使用阻止参数让回调回到控制器)并且也保持没有状态。我想认为它会更清楚如何使用它,并最好帮助避免你在你的问题中陈述的混淆。