ios - "Reinitialize"共享实例

标签 ios objective-c ipad object shared

这听起来可能很奇怪。

场景

实现 AFOauthClient

我创建了一个子类并使用我的 baseurl 和所有创建了一个共享实例 作为

+ (GYMAFOAuthClient *)sharedClient {
    static GYMAFOAuthClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{

        NSURL *url =[NSURL URLWithString:[[NSUserDefaults standardUserDefaults] stringForKey:@"kServer_Address"]];
        if (url==nil) {
            [[[UIAlertView alloc]initWithTitle:@"Required" message:@"Please enter the required fields in the settings page of the application" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]show];
        }
        else
        {
             _sharedClient = [GYMAFOAuthClient clientWithBaseURL:url clientID:kClientID secret:kClientSecret];
        }       
    });
    return _sharedClient;
}

完美运行。

但是

现在我需要切换到其他服务器,因为我正在使用 dispatch_once 方法,所以重新初始化很麻烦。我如何分配一个新的 url 并将我的共享实例与 baseurl 作为新的 url。

我尝试了什么:

我使用设置包的目的是我的用户默认设置中有 url 现在只需要创建一个客户端并开始获取响应。我该如何实现它?

澄清:

更改服务器...意味着我有 5 个 VC 和一个登录 VC 并且所有服务器基本 url 都是相同的,直到用户去编辑设置页面。所以这意味着在设置编辑后用户必须启动应用程序重新登录并然后获取所有服务。

最佳答案

显然,共享/单例实例不是解决您的问题的正确架构。我首先尝试在此处摆脱对 sharedClient 的使用,而只是将一个实例传递给需要它的事物。这样您就可以销毁它并在需要时创建一个新的。

如果这是不切实际的,因为你已经深深地伤害了你的单例,那么你需要修改它,使它成为一个“有一个”GYMAFOAuthClient 而不是一个“是一个” GYMAFOAuthClient。这样您就可以重新配置它。

关于ios - "Reinitialize"共享实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15502517/

相关文章:

iphone - Xcode 4.5.2 : How to correctly program a CGRectMake?

ios - 无法从 AFNetworking 的成功 block 调用自定义委托(delegate)

javascript - iPad Safari 弹出问题

iphone - Xcode 看不到我的 iOS 设备,但 iTunes 可以

ios - Siri 完整句子顺序,例如通过 WhatsApp 发送消息

ios - 是否应该为每个场景/屏幕创建单独的 ViewController.Swift?

ios - RestKit RKObjectMapping 一个列表

iphone - 按下按钮时如何关闭 UISplitViewController

ios - 从包含 HTML 的 NSString 创建本地 NSURL?

ios - UIView 不缩放到 iPad 视网膜