Все, что я хочу сделать, это сделать класс утилиты для моего приложения (захвата потока), которое захватывает настройки с моего сайта. Я хочу назвать это из других файлов как простой [RemoteConfig updateSettings];
Неправильная практика использования C-подобных статических переменных в Objective-C?
Моя цель - использовать эту удаленную конфигурационную утилиту, не создавая объект для каждой ситуации, когда я беру удаленные настройки.
Информация о переменных и методах static/class в Objective C является туманной и очень упрямой, поэтому после большого количества экспериментов я получил это для работы. Но это выглядит забавно, что заставляет меня думать, что что-то неверно.
RemoteConfig.h просто объявляет + (недействительными) 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-стиля над реализацией @ интерфейс/@. Многие говорят, что пытаются использовать свойства, некоторые говорят, что это метод статического метода singleton, я видел небольшую библиотеку, которая обрабатывает одиночные игры, но это было самое простое решение, которое я нашел.
Мой вопросы-
- Является ли это пословице плохо?
- Какие у этого ограничения есть?
- Каковы альтернативы, и что лучше?
Не «пословично плохой», но уродливый и небезопасный. –
Я понял, что это вызовет беспорядок с потоками. Что имеет такой же эффект, но обеспечивает безопасность резьбы? – user
Я думаю, что никакая простая концепция не может обеспечить безопасность потоков сама по себе, скорее, невозможно или очень сложно создать поточный безопасный код с глобальными переменными. –