我有一个名为"Capture"的类,它是NSObject的子类,它还将视图添加到超视图中。
我添加了一个由滑块组成的Settings.bundle。当滑块值为"ON/1"时,我将主窗口中"捕获"中的视图显示为子视图。当滑块值为"OFF/0"时,我必须删除从"捕获"添加的视图,并释放"捕获"中存在的所有对象。
当滑块值为"OFF/0"时,我只是不想将"Capture"类创建的视图隐藏到主视图上。
我想在应用程序发送到后台时而不是在应用程序终止时解除锁定"捕获",所以我不能使用通知UIApplicationWillTerminateNotification来解除锁定单例。
如果我只是隐藏"捕获"显示的视图,那么"捕获"类将不必要地使用内存
那么现在我该如何解除单身汉的锁定呢。
"捕获"类视图将位于每个视图控制器的顶部,即使在事件发生时也是如此。它由AppDelegate中调用的类方法分配一次。
singleton是这样创建的:
static ScreenCapture *sharedScreen = nil;
+(Capture *)sharedScreenCapture
{
if (!sharedScreen)
{
sharedScreen = [[Capture alloc] init];
}
return sharedScreen;
}
为什么不创建一些ReLoad
方法来清除所有现金并使您的私有变量无效?
类似这样的东西:
+(void) reLoad {
@synchronized(self) {
// clear all the cashes...
sharedScreen = nil;
}
}
并在接收到UIApplicationWillTerminateNotification
后调用它
[ScreenCapture reLoad];
您可以添加另一种方法:
+ (void)destroyScreenCapture
{
sharedScreen = nil;
}
考虑一下singleton是否真的是你要使用的正确模式,如果你真的需要销毁singleton,或者你是否应该"清理"它,为它当前没有使用的数据释放所有内存。