5

iOSのARCについて簡単な質問があります。(申し訳ありませんが、これらの種類の質問をたくさんしましたが、メモリ管理に関して非常に混乱しています。)古いメモリメンテナンスシステム(、、retain...など)を使用したことがないのでreleaseassignこれらの用語の意味がよくわかりません。

今、私は強い特性が適切に解放されることを確実にするために私がしなければならないことに関して混乱しています。たとえば、学校のアプリを作成していて、オブジェクトに5つの異なるオブジェクト(配列ではない)Schoolへの強力なプロパティ参照が含まれているとします。ChildChildオブジェクトには、オブジェクトへの強力なポインター(プロパティ)がありBookます。

学校からオブジェクトの1つを削除した場合Child(たとえば、プロパティをnilにするか、プロパティを変更して新しいオブジェクトを指すようにした場合)、オブジェクトはBook適切に解放されますか?これが事実であることを確認するために私は何をしなければなりませんか?メソッドを記述する必要がありself.myBook = nilますか?View Controllerのdealloc場合、viewDidUnloadメソッドで書き込む必要がありますか?Childself.myBook = nil

私はiOS5(およびそれ以降)のみを対象としているので、メモリ管理の古い方法は私にはあまり関係ありません。

4

1 に答える 1

5

Child学校からオブジェクトの 1 つを削除した場合(たとえば、そのオブジェクトを作成しproperty = nilたり、新しいオブジェクトを指すようにプロパティを変更したりして)、そのオブジェクトはBook適切に解放されますか?

はい、他に強い言及がない限りリリースされます。

これが事実であることを確認するにはどうすればよいですか?

特に何もありません。オブジェクトへの参照を に設定すると、ARC はオブジェクトの参照カウントnilを減らし、オブジェクトが参照されなくなったことを確認し、削除に進みます。削除されるオブジェクトから参照されるアイテムを再帰的に処理するのに十分スマートであるため、メモリリークは発生しません。

心配しなければならないことの 1 つは、循環参照です。Bookへの強力な後方参照がある場合は、Childその参照を作成するか、へweakの参照を設定すると同時にそれを消去します(2 番目のオプションはエラーが発生しやすく、したがって、推奨されません)。Booknil

于 2012-06-21T15:39:30.747 に答える