1
MyClass *var = [[MyClass alloc]initWithSomeNumber:15];
[self addChild:var];
[self removeChild:var cleanup:YES];

を呼び出すrelease必要がありvarますか? それとも、removeChildメソッドはすでにそのようなことを処理していますか? varを使用せずに作成する方法はありますallocか? というノード用のクラスメソッドがあると聞きましたnode。ただし、パラメーターは受け入れられません (ご覧のとおり、整数 15 を渡す必要があります)。

4

3 に答える 3

3

ARC を使用していない場合は、はい、リリースする必要があります。self子を追加すると保持され、削除すると解放されますが、 alloc/init 呼び出しから暗黙の保持が残ります。

于 2012-05-23T22:10:52.347 に答える
2

はい、メモリ管理ポリシーで定義されたルールの 1 つです。

あなたが作成したオブジェクトはあなたが所有します

allocにスペースを割り当てるために を使用します。varこれにより、参照カウンターが 1 に設定さvarれます。この後 ( を送信することによって) 所有権を主張する他のオブジェクトがいくつあっても、送信して参照カウンターを 1 減らすretain必要があります。そうしないと、参照カウンターが到達することはありません。 0 は、に使用されるメモリが解放されないことを意味します。つまり、メモリ リークが発生します。releasevarvar

MyClass *var = [[MyClass alloc]initWithSomeNumber:15]; // ref count = 1
[self addChild:var]; // ref count ++
[self removeChild:var cleanup:YES]; //ref count--
//ref count is 1
于 2012-05-23T22:22:16.460 に答える
1

ARC を使用すると、このリンクが役立ちます

于 2012-05-23T22:04:20.867 に答える