Objective-C释放单身人士

时间:2009-05-21 23:32:06

标签: objective-c singleton release

我对Objective-c编程和发布对象的新手是我最头疼的问题。 我总是怀疑需要释放什么,而我的时代我最终会发布错误的变量并导致BAD EXEC崩溃。 我已经阅读了关于内存管理的苹果指南,但我总是不能从他们的示例转到我的代码。

其中一种情况是我的单身人士(我是一个大单身人士)。

我有一个定义如下:

static Configuration* _instance;

+(Configuration*)getInstance{
    if (_instance == NULL){
        _instance = [Configuration alloc];
        [_instance initConfig];
    }
    return _instance;
}

在我的代码中我使用它:

//Store configuration       
Configuration* conf = [Configuration getInstance];  
conf.userName = self.userName.text;
conf.cellPhone = self.phoneNumber.text;

我是否需要发布“conf”变量?

我应该何时发布_instance?

由于我在iPhone上运行此代码,我不发布的vars会发生什么?它们会影响iPhone的性能吗?

2 个答案:

答案 0 :(得分:8)

使用“_instance = [Configuration alloc]; [_instance initConfig];”创建配置实例时它在alloc调用中有一个保留计数。如果你在“conf.cellPhone = self.phoneNumber.text;”之后释放conf。然后它将在那时被解除分配。

当您首次使用alloc,copy或mutableCopy创建对象时,它的保留计数为1.每次保留的调用都会增加,将计数保留为1。每次调用释放减少,保留计数为1.调用自动释放只是意味着“稍后给我释放呼叫”,所以如果保留和释放就像检查一样,自动释放就像将来约会检查一样。

访问配置单例的代码不保留,复制或可变复制它,因此不应该释放它。

当您的代码现在被编写时,Configuration对象将永远不会被释放,并且将在整个应用程序生命周期中存在,这通常是您想要的单例。

答案 1 :(得分:2)

您无需保留conf变量,因为您尚未保留它。

根据经验,您需要平衡对增加保留计数的方法的调用与减少它的方法。

initretain,递增它,而release递减它。

卸载类时会释放主_instance,所以我认为你不需要关心它。