5

私はObjective-Cプログラミングとオブジェクトのリリースにかなり慣れていないので、私の最大の頭痛の種です。何をリリースする必要があるのか​​常に疑問に思っています。間違った変数をリリースして、BADEXECがクラッシュすることがあります。私はメモリ管理に関するアップルのガイドを読みましたが、私はいつも彼らの例から私のコードに行くことができません。

これらの状況の1つは、私のシングルトンです(私はシングルトンの大物です)。

私はこれとして定義するものがあります:

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];[_instanceinitConfig];」を使用して構成インスタンスを作成した場合 alloc呼び出しからの保持カウントは1でした。「conf.cellPhone=self.phoneNumber.text;」の後にconfを解放する場合 その後、その時点で割り当てが解除されます。

alloc、copy、またはmutableCopyを使用してオブジェクトを最初に作成すると、保持カウントは1になります。保持を呼び出すたびに、保持カウントが1ずつ増加します。リリースを呼び出すたびに、保持カウントが1ずつ減少します。自動リリースを呼び出すと、「後でリリースを呼び出す」という意味になります。したがって、保持とリリースが小切手のようなものである場合、自動リリースは将来の小切手の日付のようなものです。

構成シングルトンにアクセスするコードは、それを保持、コピー、または変更可能にコピーしないため、解放しないでください。

コードが今書かれているので、Configurationオブジェクトは決してリリースされず、アプリケーションの存続期間全体にわたって存続します。これは通常、シングルトンで必要なものです。

于 2009-05-22T06:07:29.850 に答える
2

変数を保持していないため、変数を解放する必要はありませんconf

経験則として、保持カウントをインクリメントするメソッドと、保持カウントをデクリメントするメソッドの呼び出しのバランスをとる必要があります。

init、、retainインクリメントし、releaseデクリメントします。

main _instanceはクラスがアンロードされると解放されるので、気にする必要はないと思います。

于 2009-05-22T00:44:45.387 に答える