Синглтоны - это, в основном, глобальные переменные, и создавать глобальную переменную просто плохая идея, чтобы избежать ее передачи. Опять же, часто правильная вещь - просто передавать объекты из одного класса в другой. Хитрость заключается в определении минимального количества данных, которые вы можете передать, чтобы минимизировать связь. Это где хорошо продуманные классы важны. Например, вам редко нужно передавать NSManagedObjectContext
, потому что вы можете получить его из любого NSManagedObject
.
Теперь позвольте мне рассмотреть конкретный случай ваших дорогостоящих объектов. Вы можете попробовать объединить эти объекты вместо того, чтобы создавать их каждый раз, когда это необходимо. Доступ к базе данных является хорошим примером этого. Вместо того, чтобы выделять соединение с базой данных каждый раз, когда вы запрашиваете одно, вы извлекаете одно из кэша. Конечно, когда кеш пуст, вам нужно выделить его. И по соображениям памяти вы должны быть готовы и способны очищать кеш, когда система запрашивает об этом.
То, что создание объекта дорого, не должно иметь значения для пользователя. Это деталь реализации, но ее можно разработать вокруг. Вы должны быть осторожны, потому что только объекты, которые не имеют изменяемого состояния, могут быть обработаны таким образом, поэтому вам, возможно, придется переосмыслить дизайн ваших классов, если вы хотите пойти по этому пути.