2014-08-27 184 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服務類,我只是把它做成一個類,使用靜態方法來創建請求(並且使用阻止參數讓回調回到控制器)並且也保持沒有狀態。我想認爲它會更清楚如何使用它,並最好幫助避免你在你的問題中陳述的混淆。