5

我对 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 上运行此代码,我未发布的变量会发生什么?它们会影响 iPhone 的性能吗?

4

2 回答 2

8

当您使用“_instance = [Configuration alloc]; [_instance initConfig];”创建配置实例时 它在 alloc 调用中的保留计数为 1。如果你在 "conf.cellPhone = self.phoneNumber.text;" 之后释放 conf 那么它将在那时被释放。

当您第一次使用 alloc、copy 或 mutableCopy 创建对象时,它的保留计数将为 1。每次调用保留都会使保留计数增加 1。每次调用 release 都会减少保留计数 1。调用 autorelease 只是意味着“稍后为我调用 release”,所以如果保留和释放就像支票,那么 autorelease 就像未来约会支票。

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

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

于 2009-05-22T06:07:29.850 回答
2

你不需要释放你的conf变量,因为你没有保留它。

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

init, retain, 增加它,同时release减少它。

main _instance 在类卸载时释放,所以我认为您不需要关心它。

于 2009-05-22T00:44:45.387 回答