Как сдать синглтон?
У меня есть класс с именем 'Capture', который является подклассом NSObject, и он также добавляет представления к суперпредставлению.
Я добавил Settings.bundle, который состоит из слайдера. Когда значение ползунка 'ON/1', я показываю представления в 'Capture' в главном окне как подпредставление. Когда ползунок имеет значение "OFF/0", я должен удалить вид, добавленный из "Capture", и освободить все объекты, присутствующие в "Capture".
Я просто не хочу скрывать представления, созданные классом 'Capture', в главном представлении, когда значение слайдера равно 'OFF/0'.
Я хочу освободить 'Capture', когда приложение отправлено в фоновый режим, а не когда приложение завершается, поэтому я не могу использовать уведомление UIApplicationWillTerminateNotification, чтобы освободить одиночный файл.
Если я просто скрою виды, отображаемые в "Захвате", для класса "Захват" будет ненужное использование памяти
Так что теперь, как мне сдать один синглтон.
Представления класса 'Capture' будут находиться над каждым контроллером представления, даже когда происходят события. Он выделяется один раз методом класса, вызываемым в AppDelegate.
Синглтон создан таким образом:
static ScreenCapture *sharedScreen = nil;
+(Capture *)sharedScreenCapture
{
if (!sharedScreen)
{
sharedScreen = [[Capture alloc] init];
}
return sharedScreen;
}
2 ответа
Почему бы не создать некоторые ReLoad
метод, который очистит все ваши наличные и аннулирует вашу личную переменную?
Что-то вроде этого:
+(void) reLoad {
@synchronized(self) {
// clear all the cashes...
sharedScreen = nil;
}
}
и позвонить после получения UIApplicationWillTerminateNotification
[ScreenCapture reLoad];
Вы можете добавить другой метод:
+ (void)destroyScreenCapture
{
sharedScreen = nil;
}
Подумайте, является ли синглтон действительно правильным для вас шаблоном, и нужно ли вам действительно уничтожать синглтон, или вам просто нужно "почистить" его, чтобы освободить всю память для данных, которые в данный момент не используются.