-1

参照カウントと「オブジェクトの所有」に関するビジネス全体を理解しており、Objective-c でオブジェクトを割り当てた場合、それを解放するのはあなたの責任であることを理解しています。

しかし、新しく作成されたオブジェクトで alloc を呼び出す必要があるのはいつでしょうか? スコープの終了後に参照を保持するだけですか、それとも他の理由がありますか

4

3 に答える 3

2

オブジェクトにメモリを割り当てるには、alloc を呼び出す必要があります。

オブジェクトの典型的な設定は次のようなものです:

Object *obj = [[Object alloc] init];

alloc 呼び出しはオブジェクトにメモリを割り当て、init 呼び出しはそれを初期化します (すべての属性/プロパティに適切なデフォルト値を与えます)。

一部のオブジェクト タイプには、ファクトリ メソッドが付属しています。

NSArray *arr = [NSArray array];

この場合、オブジェクトは単一の配列呼び出しによって初期化および割り当てられます。

通常、2 つのメソッドには異なる所有権規則が適用されることを除いて、参照カウントとは (直接) 関係ありません。

于 2013-02-06T10:16:52.933 に答える
1

基本的な考え方を誤解していると思います。allocをクラスに送信すると、所有しているそのクラスの新しいオブジェクト(まだ初期化されていません)が作成されます(保持カウントは1になります)。

「新しく作成されたオブジェクトに対してallocを呼び出す必要があるのはいつですか?」という質問から。-オブジェクトが新しく作成された場合、それは誰かがすでにそれを割り当てたことを意味します。

意味する場合:新しく作成されたオブジェクトでretainを呼び出す必要があるのはいつですか?答えは、自分で保持し、割り当てた人に依存せず、いつか解放する可能性がある場合です。alloc/ new構文では、他の作成メソッド([NSArray配列]など)と同様に、保持カウントが1つ増えることに注意してください。自動解放オブジェクトを返します。

一般的に、私はARCを使用することをお勧めし、これらの問題に悩まされることはありません。

于 2013-02-06T10:22:01.607 に答える
0

私は正確には客観的な c の男ではありませんが、オブジェクトを呼び出すとは思いません。allocクラスで呼び出してオブジェクトを割り当てinit、新しく割り当てられたオブジェクトを呼び出します。

これが設定である場合は、自動解放プールによって実行されたretain後も参照を保持することができます。releaseこれは、またはそのようなものを使用して作成されたオブジェクトによく発生します[NSThing thingWithStuff:stuff]

于 2013-02-06T10:17:02.627 に答える