Где реализовать CLLocationManager

Не все языки имеют понятие неподписанного ints. Например, VB 6 не имел никакого понятия неподписанного ints, который я подозреваю, управлял решением разработчиков VB7/7.1 для не реализации также (это реализовано теперь в VB8).

Для заключения в кавычки:

http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

CLS был разработан, чтобы быть достаточно большим для включения конструкций языка, которые обычно необходимы разработчикам, все же достаточно маленьким, что большинство языков в состоянии поддерживать его. Кроме того, любая конструкция языка, которая лишает возможности быстро проверять безопасность типов кода, была исключена из CLS так, чтобы все CLS-совместимые языки могли произвести верифицируемый код, если они принимают решение сделать так.

Обновление: Я действительно задавался вопросом об этих некоторых годы назад, и пока я не вижу, почему UInt не был бы поддающейся проверке безопасностью типов, я предполагаю, что у парней CLS должно было быть пороговое значение где-нибудь относительно того, что будет базовым минимальным количеством поддерживаемых типов значения. Также, когда Вы думаете о долгосрочной перспективе, где все больше языков портируется к CLR, почему вынуждают их реализовать неподписанный ints для получения совместимости с CLS, если нет абсолютно никакого понятия, никогда?

7
задан joec 7 December 2009 в 19:28
поделиться

1 ответ

Делегат приложения - подходящее место для его размещения. Другой вариант - создать собственный одноэлементный фабричный класс, который имеет метод класса, который возвращает делегат вашего диспетчера местоположения, и реализует там методы делегата. Это позволит сохранить чистоту класса делегата вашего приложения.

Вот скелетная реализация класса синглтона, основанная на Питера Хози «Синглтоны в какао: делать их неправильно» . Это может быть излишним, но это только начало. Добавьте свои методы делегата в конце.

static MyCLLocationManagerDelegate *sharedInstance = nil; 

+ (void)initialize {
    if (sharedInstance == nil)
        sharedInstance = [[self alloc] init];
}

+ (id)sharedMyCLLocationManagerDelegate {
    //Already set by +initialize.
    return sharedInstance;
}

+ (id)allocWithZone:(NSZone*)zone {
    //Usually already set by +initialize.
    @synchronized(self) {
        if (sharedInstance) {
            //The caller expects to receive a new object, so implicitly retain it
            //to balance out the eventual release message.
            return [sharedInstance retain];
        } else {
            //When not already set, +initialize is our caller.
            //It's creating the shared instance, let this go through.
            return [super allocWithZone:zone];
        }
    }
}

- (id)init {
    //If sharedInstance is nil, +initialize is our caller, so initialze the instance.
    //If it is not nil, simply return the instance without re-initializing it.
    if (sharedInstance == nil) {
        if ((self = [super init])) {
            //Initialize the instance here.
        }
    }
    return self;
}

- (id)copyWithZone:(NSZone*)zone {
    return self;
}
- (id)retain {
    return self;
}
- (unsigned)retainCount {
    return UINT_MAX; // denotes an object that cannot be released
}
- (void)release {
    // do nothing 
}
- (id)autorelease {
    return self;
}
#pragma mark -
#pragma mark CLLLocationManagerDelegateMethods go here...
5
ответ дан 7 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: