如何释放单例



我有一个名为"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,或者你是否应该"清理"它,为它当前没有使用的数据释放所有内存。

最新更新