При принятии решения о том, подходит ли вам синглтон, нужно учитывать два важных момента (обратите внимание, что это не единственные два):
- Потоки
- Использование памяти
Потоки
Синглеты удобны, но если ваше приложение использует несколько потоков, у вас может возникнуть желание написать что-то вроде этого:
[[CDSingleton managedObjectContext] executeFetchRequest:someFetch];
//later on a background thread you might write
NSManagedObject *object = [[CDSingleton managedObjectContext] objectWithID:objectID];
Вскоре после этоговаше приложение будет аварийно завершено, потому что вы получили доступ к managedObjectContext, который, вероятно, был создан в главном потоке из какого-либо другого потока.
Использование памяти
Синглтоны никогда не исчезают,в этом смысл синглтона.Таким образом, они также никогда добровольно не освобождают свои потребляемые ресурсы.В случае CoreData это означает, что контекст управляемого объекта будет продолжать хранить управляемые объекты в памяти, пока вы не вызовете -reset или -save:.
Это может быть плохо, если ваше приложение использует много данных.