我的目标是使用这个远程配置实用程序,而不是为我抓取远程设置的每种情况制作一个对象.
Objective C中的静态/类变量和方法的信息是模糊的,非常自以为是,所以经过大量的实验,我得到了这个.但它看起来很有趣,这让我觉得有些不对劲.
RemoteConfig.h只是声明(void)updateSettings方法.
这是我的RemoteConfig.m:
#import "RemoteConfig.h" static NSMutableData* _configData; static Nsstring* url = @"http://local.namehidden.com:90/json.html"; static int try; @implementation RemoteConfig +(void) updateSettings { Nsstring *identifier = [[[UIDevice currentDevice] identifierForvendor] UUIDString]; //Create URL request NSMutableuRLRequest *request = [NSMutableuRLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval: 10]; [request setHTTPMethod: @"POST"]; Nsstring *post = [Nsstring stringWithFormat:@"id=%@",identifier]; NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:postData]; NSURLConnection* connection = [NSURLConnection connectionWithRequest:request delegate:self]; [connection start]; } ///////////////////////////// DELEGATE METHODS /////////////////////////////////// +(void)connection:(NSConnection*)conn didReceiveResponse:(NSURLResponse*)response { if (_configData == NULL) { _configData = [[NSMutableData alloc] init]; } [_configData setLength:0]; NSLog(@"didReceiveResponse: responseData length:(%d)",_configData.length); } /// and so on...
它看起来很时髦,将C风格的变量放在@interface / @实现之上.很多人说尝试使用属性,有人说做静态方法单例技巧,我见过一个处理单例的小库,但这是我发现的最简单的解决方案.
我的问题 –
>这听起来很糟糕吗?
>这有什么限制?
>有哪些替代方案,什么是最好的?
解决方法
Is this proverbially bad? What limitations does this have?
全局变量往往会施加一系列限制:
>他们通常不会妥善清理资源
>不是线程安全的(例如,可以从一个线程使用或者可以为每个线程引入状态)
>它们可能不一定安全
>他们可以通过序列化请求来解决其中的一些问题 – 引入过多的暂停和锁定.
>它们变得非常难以安全地“扩展”(即添加全局变量使其更加脆弱)
>它们很难测试,并且可能导致很难再现的错误
What are the alternatives,and what is best?
只需将这些变量移动到ivars,并创建类的实例而不是依赖于全局状态.然后,您可以以不会显着影响客户的方式进行扩展和抽象.
注意静态Nsstring * const url = @“http://local.namehidden.com:90/json.html”;不会是一个可变变量(添加const).所以它只是_configData并尝试哪些需要是ivars.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。