Если вы создаете одноэлементный менеджер местоположений, он должен действовать иначе, чем другие синглтоны.Вы не можете использовать нормальный шаблон делегата для него, чтобы сообщить другим объектам об обновлениях местоположения и ошибках, потому что нормальный шаблон делегата является отношением один к одному.Вы должны использовать несколько делегатов (синглтон имеет массив заинтересованных объектов, и он отправляет одно и то же сообщение, например, обновление местоположения, каждому).Вот еще один вопрос о том, почему это трудно использовать:
Несколько делегатов в iOS
Вы можете обойти это с помощью уведомлений, но лично я считаю, что это плохой шаблон (он расцепляетслишком много вещей и мешает идти по пути ответственности).
Синглтон также должен отслеживать, просил ли какой-либо из его заинтересованных объектов остановить или запустить.Если они все попросили его остановить, то это должно отключить обновления.Если кто-то хочет обновлений, он должен включить их обратно.Ищите всех людей, создающих фреймворки, просто чтобы выполнить ту же задачу с индикатором сети, чтобы увидеть, сколько это проблем.
Если при запросе местоположения возникает ошибка, вы должны сохранить эту ошибку и когда (через некоторое время) объект хочет местоположение, вы должны повторно передать ошибку.Так что на самом деле вы хотите, чтобы все заинтересованные объекты были подключены и прослушивались с самого начала, чтобы избежать этого сценария.
Я уверен, что мог бы придумать более сложные случаи, с которыми вам пришлось бы иметь дело.
Промежуточный вариант заключается в создании класса диспетчера местоположений с вашей специальной настройкой, проверкой ошибок и т. Д., А также в случае необходимости создавать один из них.Используйте шаблон делегата для получения сообщений от него (большинство из них будут просто передавать сообщения напрямую).