0

ARCを使用してios5の目的のcに保存しようとしているデータ構造があります。データ構造は次のようなものです-

Class - **Book**
@property (strong) NSArray *pages;
@property (strong) Page *startingPage;

Class - **Page**
@property (strong) Book *book;
@property (strong) Page *nextPage;
@property (strong) Page *previousPage;

想像できる問題は、メモリリークです。ここにはいくつかのサイクルがあります -

Book -> pages -> page -> book
nextPage -> previousPage
Book -> startingPage -> book.

プロパティを弱くすることはできません。そうすると、その値へのポインターが失われるからです。したがって、ページ内のブックを弱いものとして作成すると、ページの割り当てを解除しようとすると、ブックの割り当てが解除されます。ただし、本は割り当てられたままにしておきたいです。

このデータ構造を保存できる別の方法はありますか?

ありがとう!

4

1 に答える 1

1

weakPage-> bookを作成すると、その本へのポインタが失われる理由がわかりません。弱いプロパティは、それらが指すオブジェクトの割り当てが解除されるまで自動nilされません。少なくとも1つの他のオブジェクトがbookあなたを強く参照している限り、問題はありません。

したがって、本のNSArrayを持つLibraryオブジェクトを想像してみてください。配列は追加された本を保持するため、その本へのすべての弱参照は、本が配列から削除される(そして暗黙的に解放される)まで有効です。

于 2012-05-04T00:44:20.223 に答える