【问题标题】:Missing property after copy (iOS)复制后缺少属性(iOS)
【发布时间】:2012-07-05 03:08:24
【问题描述】:

我的项目支持 ARC,我有两个模型,例如:

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 的 parent 属性设置为 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 属性。但从第二次开始,category 属性变为 0(从调试器中捕获)。

那么,有什么问题吗?问题的解决方法是什么?

【问题讨论】:

  • 我还尝试将父级和类别属性设置为强。但问题依然存在。
  • 天啊,这是我自己的愚蠢问题。

标签: ios properties automatic-ref-counting


【解决方案1】:

为了避免引用循环,您希望一个对象对另一个对象具有弱引用,而不是使两者都具有对彼此的弱引用。我认为在这种情况下发生的事情是产品不拥有该类别并且该类别不拥有该产品,因此 ARC 假设没有人声称它们会释放这两个对象。

FIX:使这些对象之一成为另一个对象的“父对象”。

【讨论】:

  • 根树数组将它们全部保留。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多