0

私のプロジェクトは ARC 対応で、次のような 2 つのモデルがあります。

Category:

@interface Parent : NSObject
@property (assign, nonatomic) Category *parent;
@property (strong, nonatomic) NSArray *children;
@property (strong, nonatomic) NSArray *subCategories;
@end

Product:

@interface Child : NSObject
@property (strong, nonatomic) NSString *name;
@property (assign, nonatomic) Category *category;
@end

参照ループを回避し、iOS 4.x にデプロイするために、Child の親プロパティを に設定しますが、 には設定しassignませんweak

JSON データから、カテゴリと製品を含むツリーを取得できます。ツリーを使用して列挙すると、すべてが完璧になりました。そして、キーワードに一致する名前の製品を検索する再帰メソッドがあります。メソッドは次のようなものです。

- (NSArray *)productsWithKeyword:(NSString *)keyword
{
    NSMutableArray *filteredProducts = [NSMutableArray array];
    for (Category *cat in self.children) {
        NSArray *subResult = [cat productsWithKeyword:keyword];
        [filteredProducts addObjectsFromArray:subResult];
    }

    return [filteredProducts copy];
}

問題は、返された配列を使用しているときに、正しいcategoryプロパティを取得できることです。しかし、2 回目以降はcategoryプロパティが 0 になります (デバッガからキャッチ)。

だから問題は何ですか?そして、問題の修正は何ですか?

4

1 に答える 1

0

参照ループを回避するには、一方のオブジェクトにもう一方のオブジェクトへの弱参照を持たせ、両方に弱参照を持たせないようにします。この場合に起こっていることは、製品がカテゴリを所有しておらず、カテゴリが製品を所有していないことだと思います。したがって、ARCは、誰も主張しないと仮定して、両方のオブジェクトをリリースします。

修正:これらのオブジェクトの1つを他のオブジェクトの「親」にします。

于 2012-07-05T04:12:08.207 に答える