这听起来可能很奇怪。
场景
实现 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/