如何释放单身人士?

时间:2013-08-09 06:58:04

标签: iphone ios singleton dealloc

我有一个名为'Capture'的类,它是NSObject的子类,它还为superview添加了视图。

我添加了一个由滑块组成的Settings.bundle。当滑块值为“ON / 1”时,我将主窗口中的“捕获”视图显示为子视图。当滑块值为'OFF / 0'时,我必须删除从'Capture'添加的视图,并释放'Capture'中存在的所有对象。

当滑块值为“OFF / 0”时,我根本不想将'Capture'类创建的视图隐藏到主视图上。

当应用程序发送到后台而不是应用程序终止时,我想释放'Capture',因此我无法使用通知UIApplicationWillTerminateNotification来取消单个单例。

如果我只是隐藏'Capture'显示的视图,那么“Capture”类将不必要地使用内存

所以现在我如何解除单身人士的攻击。<​​/ p>

'Capture'类视图将位于每个视图控制器之上,即使事件发生也是如此。 它通过在AppDelegate中调用的类方法分配一次。

以这种方式创建单身:

static ScreenCapture *sharedScreen = nil;

+(Capture *)sharedScreenCapture
{
    if (!sharedScreen) 
    {
        sharedScreen = [[Capture alloc] init];
    }
    return sharedScreen;
}

2 个答案:

答案 0 :(得分:3)

为什么不创建一些ReLoad方法来清除所有现金并使私有变量无效?

这样的事情:

+(void) reLoad {
    @synchronized(self) {
        // clear all the cashes...
        sharedScreen = nil;
    }
}

并在收到UIApplicationWillTerminateNotification

后调用它

[ScreenCapture reLoad];

答案 1 :(得分:2)

您可以添加其他方法:

+ (void)destroyScreenCapture
{
    sharedScreen = nil;
}

考虑单例是否实际上是您使用的正确模式,如果您确实需要销毁单例,或者您是否应该“清理”它以释放当前未使用的数据的所有内存。